typescirpt中的unknown类型
当我们不知道一个值的具体类型时,可以使用any
来表示,同样的,还可以使用unknown
表示。
let value: any;
let value1: unknown;
首先对比一下使用any
和unknown
的区别。
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 of
、instanceof
或一系列类型检测的方式来缩小类型的范围,例如。
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
类型。
如果您觉得本文对您有用,欢迎捐赠或留言~
- 本博客所有文章除特别声明外,均可转载和分享,转载请注明出处!
- 本文地址:https://www.leevii.com/?p=2486