跳到主要内容

TypeScript 中的 any 和 unknown 有什么区别?

参考答案:

在 TypeScript 中,anyunknown 都是特殊的类型,它们在某些情况下可以用于处理不确定或未知的类型。然而,它们之间的主要区别在于它们的用途和安全性。

  1. any:

    • any 类型表示可以是任何类型。当你不知道或不关心一个变量的具体类型时,你可以使用 any 类型。
    • 使用 any 类型会绕过 TypeScript 的类型检查,这意味着如果你错误地使用了某个值,TypeScript 可能不会给出任何警告或错误。
    • 使用 any 可能会降低代码的安全性,因为它允许执行不安全的操作,如将一个对象赋值给一个数字变量。
  2. unknown:

    • unknown 类型表示一个值可以是任何类型,但在使用它之前,你需要显式地进行类型断言或类型检查。
    • 使用 unknown 可以提高代码的安全性,因为它强制你在使用值之前进行类型检查。这有助于避免潜在的类型错误。
    • unknown 是 TypeScript 3.0 中引入的,作为 any 的一个更安全的替代方案。

示例:

let x: any = "hello";
x = 123; // 没有错误,因为 x 是 any 类型

let y: unknown = "hello";
y = 123; // 错误,因为 y 是 unknown 类型,不能直接赋值给其他类型

if (typeof y === "string") {
  console.log(y.length); // 正确,因为我们已经确定了 y 是 string 类型
}

总之,anyunknown 都可以用于处理不确定的类型,但 unknown 提供了更好的类型安全性和控制。在可能的情况下,最好使用 unknown 而不是 any