typescript undefined_typescript有必要学吗

typescript undefined_typescript有必要学吗在typescript中,当我们不确定一个类型是什么类型的,可以选择给其声明为any或者unkown

在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

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注