typescirpt中的unknown类型

当我们不知道一个值的具体类型时,可以使用any来表示,同样的,还可以使用unknown表示。

let value: any;
let value1: unknown;

首先对比一下使用anyunknown的区别。

let value: unknown;

let s1: boolean = value; // ERROR
let s2: any[] = value; // ERROR
new value(); // ERROR
value.name; // ERROR
value.foo.bar; //ERROR

let anyValue: any;
anyValue.name; // OK 
anyValue.foo.bar; // OK
new anyValue(); // OK

unknown其实是any的安全类型,它有更多的约束,对于未知的类型不能赋值给特定的类型,并且也不能做一些复杂操作,比如new或者当成一个对象获取其属性等。

但是,可以将unknown赋值给any或者unknown

let value: unknown;

let s1: any = value; // OK
let s2: unknown = value; // OK

当不确定一个值的类型时,可以使用type ofinstanceof或一系列类型检测的方式来缩小类型的范围,例如。

function convertValue(value: unknown): string {
  if (Array.isArray(value)) {
    return value.join(',');
  }
  if (typeof value === 'number') {
    return `${value}`;
  }
  return String(value);
}
function isString(val: unknown): val is string {
  return typeof val === 'string';
}

所以,为了充分利用typescript提供的安全检查,可以用unknown替代一些不必要的any类型。

如果您觉得本文对您有用,欢迎捐赠或留言~
微信支付
支付宝

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注