unknown和any有什么区别

1,477 阅读1分钟

unknown,一个神奇的类型,有点像any,但是又不太一样,用官网的说法就是:

The unknown type represents any value. This is similar to the any type, but is safer because it’s not legal to do anything with an unknown value.

翻译成大白话的意思就是:unknown类型代表任何类型,它的定义和any定义很像,但是它是一个安全类型,使用unknown做任何事情都是不合法的。举个例子和any的区别就是:

function unknownFunction(param: unknown) {
  const a = param + 1;
}

function anyFunction(param: any) {
  const a = param + 1;
}

此时,类型检测会提示

image.png

所以unknown并没有放弃类型检测,它还是会要求你断言具体类型,然而any不会,所以正确使用unknown的方式是:

function unknownFunction(param: unknown) {
  const a = param as string + 1;
}

function anyFunction(param: any) {
  const a = param + 1;
}

完美通过类型检测

image.png

当然这种方式并不是最好的,我们应该通过类型收缩来变成具体类型,然后再进行操作,所以实际上应该这么用:

function unknownFunction(param: unknown) {
  if(typeof param === 'string') {
      return 1 + param;
  } else if(param ==='number') {
      return 2 + param; 
  }
}

image.png

所以,如果可以,尽量使用unknown类型,不然any用多了就成了anyscript