我们已经使用了很多Typescript的特性,它的好处不言而喻。但随着新版本的频繁发布,很容易错失很多新特性。我也不例外,很多东西后来看文档才发现,其实人家早已支持了。
这篇文章我们一起来看下这些新东西,看看你是否已经掌握?
区别unknown vs any
unknown是any的更安全版本
在弄清楚它俩有什么不同,我们先看看他们有什么相同的地方。
我们可以给他们设置任何类型的值,它们都可以正常工作而不出错。
不同点在哪?
any 运行我们干任何事情,都不会报错, 比如下面这个,它在编译的时候不会报错,但运行时会崩溃。简言之就是编译器不会对any类型做任何检查
unknown 就是为了阻止这种事情发生。对unknown做任何操作,编译器不允许
要使用unknown,必须你确定你在干什么,比如用下面这几种方法,你可以对unknown操作。
使用类型推断
使用类型守卫
自定义类型守卫
索引访问类型(查找类型)
我们可以使用索引来查找一个已知类型的字段,从而新建一个类型。
如上图,我们从已知类型上新建了id, Session,Street, Addons类型。
我们甚至可以直接用作函数参数
infer关键字
它允许你从条件类型中的类型推断出一个新类型,如下
这里我们推断出了AddonType类型,看下面的智能提示。
什么时候使用never
never 表示一个值永远不被观察到,或者没有返回。比如一个函数发生了异常,它的返回值就是never
不结束的函数返回never
上面三种情况都可能会返回never
最后,联合类型判断了所有情况后,剩下的就是never
使用as const推断
可以看到,如果具体值,跟写前面没什么区别,都会变成具体类型,而不会将类型扩大化,比如下面,类型只可能是John而不会变成string
const username = 'John' as const; // type 'John'
对象做这种推断,会得到一堆readonly属性
数组做这推断,会得到readonly的元组
另外,const可以帮助我们把字符串数组变成联合类型
Override关键字
学过静态语言的小伙伴对这个应该不陌生,它可以告诉你子类方法覆盖了父类方法。
这是个新特性,你可能还用老的办法进行覆盖,但强烈建议把编译开关关掉,这样代码更安全noImplicitOverride: true
静态代码块 static block
很像静态构造函数,可以让你初始化一些静态字段
| 留言与评论(共有 0 条评论) “” |