在typescript中,当我们不确定一个类型是什么类型的,可以选择给其声明为any或者unkown。但实际上,typescript推荐使用unknown,因为unknown是类型安全的。
什么是类型安全的?
如下,如果是any,你可以任意的取值赋值,不会进行任何的类型检查。但unkown就不一样了,必须先进行断言 就是使用typeof 或 instanceof 来判断类型。
其实二者是有本质的区别的,说起来要引入一个多态的概念。
举个简单的例子,人类的祖先是猿人,他们也会生火,也会穿一些简单的衣服…
所以猿人可以看做是现代人类的父类型,他可以替代子类型出现。在程序运行时我们可以这样写
猿人 = new 现代人()
// 也就是:
parent: Parent = new Child()
但是你不能让子类型去替代父类型,因为显然子类型的能力基于父类型扩展出来的,所以,子类型的方法行为父类型未必有。
现代人 = new 猿人()
现代人.开车()
// 显然是跑不通的,因为现代人只是代替猿人出现的,真正的对象是猿人,他当然不会开车…
好了,再看回typescript,结合上面的分析,我们知道,二者均可以被任何类型赋值。但当调用他们身上方法属性的时候:
我们发现,foo(unkonw)不可以赋值给其他类型,而bar(any)可以。这里其实折射了一个本质问题:
any是任意类型的父类型,同时也可以是任意类型的子类型
unknown是任意类型的父类型,但仅此而已。
我们可以思考一下,any可以作为其他任意类型的子类型,也就是任意类型都可以替代any类型出现,那么,String可以,Promise也可以,所以bar(any)可以赋值给bar1(String),同样也可以调用then方法(因为Promise代替他了)。
至此,我们就知道为什么unknown是类型安全的了。因为他只是指明了类型还未确认,后续还需要你去断言,也就是他并未放弃类型检查。
今天的文章typescript undefined_typescript有必要学吗分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/83527.html