当前位置: 首页 > news >正文

TypeScript(ES6) 的一些使用的小技巧

1、Object.values() 和 Object.keys() 的使用

  • 在处理 object 的时候我们使用 Object 的一些自带的一些方法
  • Object.keys()返回 keys 的数组,Object.values()返回 values 的数组。

2、合理的使用 reduce/filter

  • 需求1:处理这样的对象中的 value 值,拼接成一个字符串。
// 有这样的一个对象,value 可能为空
const obj = {
    a: '1',
    b: '2',
    c: '3',
    d: '',
    e: '5'
    ...
}

// 后端只需要这个对象中的 value 值的逗号拼接 eg: '1,2,3...'

Object.values(obj).filter(Boolean).join(',');

// => '1,2,3,5...'
复制代码
  • 需求2:需要处理一个 object 中的 values 返回一个新的对象。
// 还是这个 obj 但是现在我们想把 value 的值处理成 number 类型,然后再返回一个key 相同的对象。
let obj = {
    a: '1',
    b: '2',
    c: '3',
    d: '',
    e: '5'
    ...
}

// 预想得的值
obj = {
    a: 1,
    b: 2,
    c: 3,
    d: '',
    e: 5
    ...
}

// 使用 lodash reduce
_.reduce(object, (result, value, key) => result[key] = (Number(value), result)), {})

// zipObject(arr1,arr2) 
_.zipObject(Object.keys(obj),Object.values(obj).map(item=>item = Number(item)))

// demo
_.zipObject(['a', 'b'], [1, 2]);
// => { 'a': 1, 'b': 2 }

// 这里可以 reduce
Object.keys(obj).reduce((result,value,key,arr)=>{
    obj[value] && (obj[value] = Number(obj[value]))
},{})

// 原生的 forEach
// Object.keys(obj).forEach(item=>{
//    obj[item] && (obj[item] = Number(obj[item]))
// },{})

console.log(obj)

复制代码

3、Ts 定义任意属性

  • 需求:定义一个 any 的{}
const defaultValues: any = {};
const a = {} as any;
复制代码
  • 接口任意属性
interface Person {
    name: string;
    age?: number;
    [propName: string]: any;
}

// [propName: string]:any 定义任意属性
let tom: Person = {
    name: 'Tom',
    gender: 'male'
};

复制代码

Ts 类型定义

数组的几种定义方法

  • 类型 + 方括号」表示法
let fibonacci: number[] = [1, 1, 2, 3, 5];
复制代码
  • 数组泛型
let fibonacci: Array<number> = [1, 1, 2, 3, 5];
复制代码
  • 用接口表示数组
interface NumberArray {
    [index: number]: number;
}
let fibonacci: NumberArray = [1, 1, 2, 3, 5];
复制代码
  • any 在数组中的应用
let list: any[] = ['Xcat Liu', 25, { website: 'http://xcatliu.com' }];
复制代码

Mobx的使用

  • Mobox返回不是真正的数组,通过mobx提供的toJS方法转换成Array再使用
import { observable, computed } from 'mobx';

import { toJS } from 'mobx';
复制代码

参考

  • www.lodashjs.com/docs/4.17.5…
  • developer.mozilla.org/zh-CN/docs/…

相关文章:

  • git远程分支回退
  • 开源SQL-on-Hadoop系统一览
  • Terraform入门 - 3. 变更基础设施
  • 【刷算法】LeetCode-26.删除排序数组中的重复项
  • SpiderData 2019年2月16日 DApp数据排行榜
  • matlab-基础 矩阵 同时修改多个元素
  • micropython esp8266 烧录
  • SOFAMosn配置模型
  • GPU编程(五): 利用好shared memory
  • Systemd曝3漏洞,大部分Linux将受到***
  • VM虚拟机中fedora28 无法使用中文输入法问题
  • js常用通用函数(++++验证)
  • Spring Boot MyBatis配置多种数据库
  • 简单基于spring的redis配置(单机和集群模式)
  • 关于字符编码你应该知道的事情
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • Brief introduction of how to 'Call, Apply and Bind'
  • DataBase in Android
  • echarts花样作死的坑
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • GitUp, 你不可错过的秀外慧中的git工具
  • Java|序列化异常StreamCorruptedException的解决方法
  • JavaScript-Array类型
  • JAVA多线程机制解析-volatilesynchronized
  • JS题目及答案整理
  • 从0实现一个tiny react(三)生命周期
  • 深度学习在携程攻略社区的应用
  • FaaS 的简单实践
  • Nginx实现动静分离
  • Python 之网络式编程
  • 积累各种好的链接
  • 说说我为什么看好Spring Cloud Alibaba
  • ​决定德拉瓦州地区版图的关键历史事件
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • #QT(一种朴素的计算器实现方法)
  • #前后端分离# 头条发布系统
  • (ZT)一个美国文科博士的YardLife
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (二)pulsar安装在独立的docker中,python测试
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (黑马C++)L06 重载与继承
  • (实战篇)如何缓存数据
  • (四)Controller接口控制器详解(三)
  • (转)c++ std::pair 与 std::make
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转)大型网站的系统架构
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .NET Core Web APi类库如何内嵌运行?
  • /etc/sudoer文件配置简析
  • ??javascript里的变量问题
  • @RequestBody与@ResponseBody的使用
  • [ 环境搭建篇 ] 安装 java 环境并配置环境变量(附 JDK1.8 安装包)