跳到主内容

typescript中any和unknown的区别

· 2分钟阅读

项目中实现 TypeScript 时,我们可能经常觉得使用 any 类型非常方便。any 和 unknown 都是顶级类型,但是 unknown 更加严格,不像 any 那样不做类型检查,反而 unknown 因为未知性质,不允许访问属性,不允许赋值给其他有明确类型的变量。

any 和 unknown 的区别

any不强制进行类型检查,可以存储任何类型的值也可以赋值给任何类型的变量

unknown可以存储任何类型的值但不能赋值给其他任何类型的变量,除非赋值给自身或者进行了数据断言或者数据推断使之类型更加明确。

any 使用场景

任何你想偷懒的场景,如果这样还不如用 js

unknown 使用场景

使用 未知的 或者 不稳定的 数据来源的数据结构,可以使用 unknown 来代替。

将 unknown 类型缩小为一个更具体的类型

不同于 any 类型。如果不缩小类型,就无法对 unknown 类型执行任何操作

使用 typeof 判断类型

function unknownToString(value: unknown): string {
if (typeof value === "string") {
return value;
}
return String(value);
}

使用 instanceof 判断类型

type getAnimal = () => unknown;

const dog = getAnimal();

if (dog instanceof Dog) {
console.log(dog.name.toLowerCase());
}

对 unknown 类型使用类型断言

const value: unknown = "Hello World";
const foo: string = value; // Error
const bar: string = value as string; // OK