ZDecode
Typescript

unknown/any

unknownany 类型解析:

unknownany 都是 TypeScript 中用于表示任意类型的类型,但它们之间有一个关键区别:安全性

特性anyunknown
可赋值给任意类型可以不可以,除非先做类型检查或断言
类型安全不安全,完全放弃类型检查更安全,使用前必须先检查其类型
推荐程度不推荐使用(除非万不得已)推荐使用(更安全的任意类型)

使用

any

let value: any = 'hello';

value.toFixed(); // 没报错,但运行时出错,因为字符串没有 toFixed 方法

unknown

let value: unknown = 'hello';

value.toFixed(); // 编译错误:Object is of type 'unknown'

要使用 unknown,必须先做类型检查:

if (typeof value === 'string') {
  console.log(value.toUpperCase()); // OK
}

联系

  • 都可以接受任意类型的赋值:
let x: any = 123;
let y: unknown = 'abc';
x = true;
y = [1, 2, 3];
  • 都可以作为逃避类型检查的一种方式,但 unknown 更安全。

使用

  • any:快速原型、老旧项目迁移、第三方库未提供类型。

  • unknown:期望支持任意类型输入但仍保持类型安全的情况下(如处理 JSON、通用函数参数等)。

总结

  • any: 不在乎是它是什么类型。(不在乎所以无所谓, 更随意,也更不安全)

  • unknown: 不知道是它是什么类型。(不知道什么所以更安全,需要断言或者类型检查)