typescirpt中的unknown类型

该文章由 leevare 发布于 ,归类于 Javascript

当我们不知道一个值的具体类型时,可以使用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类型。

如果觉得我的文章对您有用,请您随意打赏。您的支持将鼓励我更加努力创作!

相关文章:

订阅
提醒
guest
0 评论
Inline Feedbacks
View all comments