在TypeScript
中,any
和unknown
都是表示不确定类型,他们唯一相同的一点就是任何类型的变量都可以赋值给它们。
如下图所示,分别给定义为any
和unknown
类型的变量赋任意值都是没有问题的
那么,它们到底有什么区别呢?
还是使用上面定义的变量,调用字符串的方法split
,对于any
类型的变量a1
没有问题。
但是在类型为unknown
的变量uk1
上使用split
方法时提示错误。
这是因为类型为unknown
的变量在被使用的时候需要先进行类型判断,才能执行相应的类型操作。
比如这里将uk1
断言为string
类型就没有问题了。
对于any
类型的变量直接操作风险很大,因为我们不确定它实际的类型是什么,而且代码也没有报错提示。而unknown
类型的变量在使用的时候需要先去指定类型,可以减小风险,在使用的时候先去想下真是的类型,当然也可能会指定为错误的类型,那这就是个人问题了😃。
因此,如果我们需要表示不确定类型的值,我们应该尽可能地使用unknown
类型,因为它可以帮助我们在编译时捕获类型错误,相较于any
更加安全。