平常在项目里常遇到一些ts的额外衍生的类型。其中any,void,never,unknown这些容易一直不知道具体的区别。现在我们来对这四个类型做个区分。
any
任意类型,这个是ts中不写类型申明的默认类型,即不作任何约束,编译时会跳过对其的类型检查。
let val: any;
let array = any[] = [123, "bbb", true, null];
void
表示无任何类型,与any正好相反,没有类型,如果函数没有返回值或者返回undefined,则使用void,变量也可以申明为void,只是变量值需为undefined。
let val: void;
let item: void = undefined
unknown
表示未知类型,是ts3.0中引入的类型。能被赋值任何类型。即写代码的时候不知道会得到怎样的数据类型,例如接口返回数据等,可以理解为any的替代类型,因为不推荐使用any类型,用了等于没用。
let val: unknown;
let resp: unknown = "bbb";
never
表示用不存在的值的类型,一般用于永远到达不了的场景,或者说一些情况值永远不存在,比如一个函数执行刨出异常,那么这个值就不会有了,因为运行不到返回值的那一步。语义化的类型。几乎用不到,我们的项目中只有一个同事用到了一次这个类型。
const flag: never = 1 + 1 === 3
if (flag) {
throw('抛出异常');
}
function loop(msg: string): never {
throw new Error(msg);
}