TypeScript 2.0版本引入了仅有的尾端类型—never类型。never类型使用never
关键字来标识,不包含任何可能值。示例如下:
function f(): never {
throw new Error();
}
根据尾端类型的定义,never类型是所有其他类型的子类型。所以,never类型允许赋值给任何类型,尽管并不存在never类型的值。示例如下:
let x: never;
let a: boolean = x;
let b: string = x;
let c: number = x;
let d: bigint = x;
let e: symbol = x;
let f: void = x;
let g: undefined = x;
let h: null = x;
正如尾端类型其名,它在类型系统中位于类型结构的最底层,没有类型是never类型的子类型。因此,除never类型自身外,所有其他类型都不能够赋值给never类型。示例如下:
let x: never;
let y: never;
// 正确
x = y;
// 错误
x = true;
x = 'hi';
x = 3.14;
x = 99999n;
x = Symbol();
x = undefined;
x = null;
x = {};
x = [];
x = function () {};
需要注意的是,就算是类型约束最宽松的any类型也不能够赋值给never类型。示例如下:
let x: any;
let y: never = x;
// ~
// 编译错误:类型'any'不能赋值给类型'never'
酷客网相关文章:
评论前必须登录!
注册