Skip to content

介绍

  • unknown 是 TypeScript 3.0 引入了新类型,是 any 类型对应的安全类型。
相同点let value: anylet value: unknown
value = true;OKOK
value = 1;OKOK
value = "Hello World";OKOK
value = Symbol("type");OKOK
value = {}OKOK
value = []OKOK
  • unknown 和 any 的主要区别是 unknown 类型会更加严格: 在对unknown类型的值执行大多数操作之前,我们必须进行某种形式的检查, 而在对 any 类型的值执行操作之前,我们不必进行任何检查。
  • 当 unknown 类型被确定是某个类型之前,它不能被进行任何操作
不同点let value: anylet value: unknown
value.foo.bar;OKERROR
value();OKERROR
new value();OKERROR
value[0][1];OKERROR

例子

有这么一个函数

js
function divide(param: any) {
  return param / 2;
}

把 param 定义为 any 类型,TS 就能编译通过,没有把潜在的风险暴露出来,万一传的不是 number 类型,不就没有达到预期了吗。

把 param 定义为 unknown 类型 ,TS 编译器就能拦住潜在风险,如下图,

因为不知道 param 的类型,使用运算符 /,导致报错。

再配合类型断言,即可解决这个问题,

js
function divide(param: unknown) {
  return param as number / 2;
}