TS 中的 any 与 unknow

204 阅读1分钟

注意点

unknowany的区别在于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类型的值不能赋值给anyunknow之外的类型变量,任何类型的值都可以赋值给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并不会改变结果。