Avatar ·

TypeScript中的`unknown`和`any`类型:有什么区别以及何时使用?

大家好!我最近开始学习TypeScript,遇到了两个乍看非常相似的类型:`any`和`unknown`。两者都允许存储任何类型的值,但我感觉它们之间存在一些重要的区别,而我忽略了。 例如,我编写了一个从API接收数据的函数。我事先不知道会收到什么——可能是对象、字符串或数字。这是我目前的做法: ```typescript function processData(data: any) { console.log(data.toUpperCase()); // 运行无错误,但运行时可能崩溃 } ``` 但如果我尝试使用`unknown`,就会收到错误: ```typescript function processDataSafe(data: unknown) { console.log(data.toUpperCase()); // 错误:Object is of type 'unknown' } ``` 为什么会这样?似乎两种类型都允许存储任何内容,但`unknown`的行为更严格。我读到过`unknown`是`any`的类型安全替代品,但我不完全理解这在实践中意味着什么。