TypeScript 中的 `any` 类型和 `unknown` 类型的区别。

73 阅读1分钟
  • any 类型

    • any 是 TypeScript 中的顶级类型(Top Type),表示可以是任意类型。

    • 当你将一个值声明为 any 类型时,TypeScript 的类型检查器会完全跳过对它的检查,允许你对它执行任何操作。

    • 示例:

      typescript复制代码

      let value: any;
      value = 42; // OK
      value = 'Hello'; // OK
      value = true; // OK
      
  • unknown 类型

    • unknown 是 TypeScript 3.0 引入的一种安全的顶级类型,表示可以是任意类型,但不允许在不知道具体类型的情况下直接对它执行操作。

    • 在使用 unknown 类型的值之前,必须进行类型检查或类型断言。

    • 示例:

      typescript复制代码

      let value: unknown;
      value = 42; // OK
      value = 'Hello'; // OK
      value = true; // OK
      
      // 错误:不能直接对 unknown 类型的值执行操作
      // console.log(value.toUpperCase()); // Error
      
      // 正确:类型检查后可以执行操作
      if (typeof value === 'string') {
        console.log(value.toUpperCase()); // OK
      }
      
  • 区别

    • any 类型允许对值执行任何操作,而 unknown 类型要求在使用之前进行类型检查。
    • unknown 类型更安全,因为它可以防止潜在的运行时错误。
    • 如果你不确定一个值的类型,但又不想放弃类型检查,应该使用 unknown 类型。