TypeScript never类型

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'

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!