记录一些自己在ts上费过时间的地方。
(先吐个槽:stackoverflow是真的啥都有,百度是真的没法用)
坑
-
as断言的兼容性误解,如
"a" as "b"
这种代码是不会报错的。 -
interface和type的不一致行为(初遇还以为自己写错类型,一脸懵逼的):
github上官方有说明,是故意留这么个坑的。说是因为interface可扩展(同名自动合并),所以不便检测。
-
用泛型实现函数重载的效果时,在函数的实现中,会因泛型不具备具体约束,导致经常需要使用as强制断言。
-
扩展运算符并不符合直观感受:
。新版ts加了禁止连续解构的规则,这种类型直接不让写了。[...string[], number]
这种类型在使用时是符合阅读时的直觉的(要求数组末尾是number元素),但是[...string[], null, ...object[], number]
这种不行,不会按顺序来也不会报错- 其实这里有解决办法,但是写出来的类型简直没法看(几十行,包含大量
extends
充当类型的if判断),就不贴了下面贴代码:
- 其实这里有解决办法,但是写出来的类型简直没法看(几十行,包含大量
进阶操作
-
对象名重映射:
-
联合类型的拆分:用
infer
关键字可以实现对联合类型的拆分。 -
元组类型:
- 实际(非类型)参数有时候需要通过
as const
明确定义为元组类型。 - 元组类型可以通过
元组["length"]
获取准确的长度,而不是number。 - 元组类型在通过泛型参数使用时,有时候需要通过加个
[]|
写成元组 extends []|any[]
这种方式来避免被解析为普通的不定长数组类型。
- 实际(非类型)参数有时候需要通过
-
递归类型:用
...infer More
可以实现对数组类型的递归。
零碎
&
可以代替extends对type使用,interface除了可以合并同名的类型,其它的没啥差别了。- ts具有丰富的内建类型,挑几个例子:
ReturnType<函数类型>
,获取函数类型的返回值的类型。Uncapitalize<字符串>
,将输入的字符串类型的首字母锁定为小写(其它还有首字母大写、全小写、全大写)。
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!