从 0 开始的 TypeScriptの十四:内置工具类型
序
在之前的《从0开始的TypeScriptの十三》中,已经对typescript
的工具类型中的关键字infer
、extends
、keyof
、typeof
、in
这些有所了解了,那么接下来为了使用更加方便,可以对typescript
中内置的工具类型进行一些学习。
正文
上面这些内置的工具类型能够很大程度上简化代码。
比如说给定一个interface
接口,需要将内部所有属性都变成可选类型
虽然我们自己也可以写,但是如果直接使用现有的内置工具类型Partial
不是更好么
或者说我在网上看到的一道转换题目:
如何定义一个
SetOptional
工具类型,支持把给定的keys
对应的属性变成可选的?
这样在修改时思考方式,需要对Foo
与a | b
匹配的属性拆除来变成可选,然后不匹配的属性维持不变,最后将可选和不可选通过&
进行联合
不过这样虽然思路很清晰,但是看起来写了好多。事实上,可以使用Partial
和Pick
来代替CommonFun
, 然后用Omit
代替Unequal
只需要像下面的一句就可以解决,是不是缩减了很多代码
当然这些都是要基于对typescript
内置类型比较熟悉的情况下,最好的方式就是多多去使用。就像当初最开始学习javascript
时,对于Math.floor
、splice
这些方法也是多使用才能够熟悉起来。
当然上面的这些例子可能会觉得实用性不大,那么将数组类型扁平化总应该算有点实用性吧
将[ number, [string], [ boolean, [ void, string ] ] ]
转换成 number | string | boolean | void
扁平化联合
这种例子很容易就会想到递归函数
解决方案:首先使用infer X[]
将当前数组中的元素进行判断,如果不是数组则直接返回,否则元素重新进入SetOptional
判断循环。
版权声明: 本文为 InfoQ 作者【空城机】的原创文章。
原文链接:【http://xie.infoq.cn/article/242711f55f76df3dd09c19f3f】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论