TypeScript中一些特殊类型
对于我当前所在team来说,TS几乎已是JS项目标配,估计其他厂也类似。原因很简单,就是类型检测可以为项目保驾护航,同时也TS类型声明本身充当了一部分文档的作用。
不知不觉,使用TS也好多年头,但是有些类型并不常用,必须承认原因就是没懂。因此,这里根据实践和学习,Mark下。
never
关于never需要有几点认识
- never是底部类型
- 常用于逻辑分支判断,确保新增的逻辑不会被遗忘
- void 表示返回为空,即返回undefined,没有任何类型,never 表示永远不存在的值的类型,永不返回。
使用场景
1 | interface Circle { |
如上,比如Switch中,穷举了所有情况,default为不存在的情况,如果有一天,外围的逻辑增加了Triangle类型,则这里编译即会报错
相关文章
- https://stackoverflow.com/questions/40251524/typescript-never-type-inference
- https://en.wikipedia.org/wiki/Bottom_type
- https://fullstackbb.com/typescript/never-type-in-typescript/
ArrayLike,PromiseLike
TS中关于JS的环境声明下有这样几个like类型。比如ArrayLike,那么与Array类型有什么区别呢
lib/lib.es5.d.ts
1 | interface ArrayLike<T> { |
如上定义可以看出ArrayLike只有两个属性,而Array有很多方法,比如pop。
使用场景
1 | function getSize(arr: ArrayLike<any>): number { |
如上,如果我们将getSize的参数类型限制为array,则fn函数即会报错,因为arguments并非数组。因此ArrayLike面向于类似上述的情况。
相关文章
写在最后
吐槽下,如果说只是会写个interface,pick,omit,联合类型等都不用的话,其实TS的价值就很低,也不要说自己会TS。