TS中any和unknown

97 阅读1分钟

TypeScript中,anyunknown都是表示不确定类型,他们唯一相同的一点就是任何类型的变量都可以赋值给它们。

如下图所示,分别给定义为anyunknown类型的变量赋任意值都是没有问题的

image.png

image.png

那么,它们到底有什么区别呢?

还是使用上面定义的变量,调用字符串的方法split,对于any类型的变量a1没有问题。

image.png

但是在类型为unknown的变量uk1上使用split方法时提示错误。

image.png

image.png

这是因为类型为unknown的变量在被使用的时候需要先进行类型判断,才能执行相应的类型操作。

比如这里将uk1断言为string类型就没有问题了。

image.png

对于any类型的变量直接操作风险很大,因为我们不确定它实际的类型是什么,而且代码也没有报错提示。而unknown类型的变量在使用的时候需要先去指定类型,可以减小风险,在使用的时候先去想下真是的类型,当然也可能会指定为错误的类型,那这就是个人问题了😃。

因此,如果我们需要表示不确定类型的值,我们应该尽可能地使用unknown类型,因为它可以帮助我们在编译时捕获类型错误,相较于any更加安全。