声明为 Never
类型表示永远不存在的值的类型。
Never
类型可以用来表示会抛出异常或根本不会有返回值的函数表达式或箭头函数表达式的返回值类型;被永不为真的类型保护所约束时的变量也可用 Never
来表示。
function exceptionHandle(msg: string): never{
throw new Error(msg)
}
// 推断的返回值类型为never
function errorHandle(){
return Error('This is error')
}
// 返回never的函数必须存在无法达到的终点
function stopLoop(): never {
while (true) {}
}
编译成js:
// 返回never的函数必须存在无法达到的终点
function exceptionHandle(msg) {
throw new Error(msg);
}
// 推断的返回值类型为never
function errorHandle() {
return Error('This is error');
}
// 返回never的函数必须存在无法达到的终点
function stopLoop() {
while (true) { }
}
never
是其它类型(包括 null
和 undefined
)的子类型,也可以赋值给任何类型。
let res: never
let num: number = 1
// never 类型可以赋值给 never类型
res = (() => {
throw new Error('error')
})()
// never 类型可以赋值给 数字类型
num = (() => {
throw new Error('error')
})()
编译成js:
var res;
var num = 1;
// never 类型可以赋值给 never类型
res = (function () {
throw new Error('error');
})();
// never 类型可以赋值给 数字类型
num = (function () {
throw new Error('error');
})();
但是,没有类型是 never
的子类型或可以赋值给 never
类型(除了 never
本身之外)。 即使 any
也不可以赋值给 never
。如下:
let res: never
let num: number = 1
res = 1
会报错: