TypeScript细碎知识点:unknown, any的区别

any 和 unknown 在 TypeScript 中是所谓的“顶部类型”。

top type [...]是 通用(universal) 类型,有时也称为 通用超类型,因为在任何给定类型系统中,所有其他类型都是子类型[...]。通常,类型是包含了其相关类型系统中所有可能的[值]的类型。

也就是说,当把类型看作是值的集合时,any 和 unknown 是包含所有值的集合。

any

  • 如果一个值的类型为 any,那么我们就可以用它任何事

  • 任何类型的值都可以赋值给 any 类型

  • 类型 any 也可被可赋值给每一种类型

使用 any,我们将会失去通常由 TypeScript 的静态类型系统所给予的所有保护。因此,如果我们无法使用更具体的类型或 unknown,则只能将其用作最后的手段。

unknown

unknown 类型是 any 的类型安全版本。每当你想使用 any 时,应该先试着用 unknown。

在 any 允许我们做任何事的地方,unknown 的限制则大得多。

在对 unknown 类型的值执行任何操作之前,必须先通过以下方法限定其类型:

  • 类型断言 (as)

  • 相等 (===)

  • 类型防护 (typeof)

  • 断言函数

就是unknown类型的变量在确定其类型前,无法做任何事。并且unknown类型只能赋值给any或unknown类型

posted on 2024-04-10 16:06  梁飞宇  阅读(17)  评论(0)    收藏  举报