注意点
unknow和any的区别在于unknow类型检查会更严格;在对unknow类型的数据进行操作之前必须要进行相关的类型检查,比如访问length等,一般可以通过类型断言或者类型保护(if判断);而any类型则不需要任何检查,但失去了TS的使用初衷。
let value:unknown;
value = 'hello';
(value as string).length;
let value:unknown;
value = 'hello';
if (typeof value === 'string') {
value.length
}
unknow类型的值不能赋值给any和unknow之外的类型变量,任何类型的值都可以赋值给unknow类型。因为unknow的未知性,不允许访问属性,不允许赋给其他有明确类型的变量。为了将unknow类型的值赋值给给定类型的数据,可以使用类型断言。
const value:unknown = "Lbxin";
const value1: string = value; // Error
const bar:string = value as string; //success
联合类型的
unknow会吸收任何其他类型的数据,最终返回为unknow类型,但联合类型中有any类型时就相当于any。
type type1 = unknown | null; //unknow
type type1 = unknown | number[]; //unknow
type type1 = unknown | any; //any
交叉类型中的
unknow,由于任何数据类型都可以赋值给unknow,所以在交叉类型中的unknow并不会改变结果。