定义
never 类型是typescript中的底层类型。它自然被分配的一些例子:
-
一个
从来不会有返回值的函数(如:如果函数内含有while(true){}),因为死循环,永远也不会有返回值 -
一个
总是会抛出错误的函数(如:function foo() { throw new Error('not implemented')},因为error将不会有返回值)
例子
1、一个未定义的可以这么写:
let foo: never
2、抛出异常的函数:
let a: never = (() => {
throw new Error('error')
})
3、永远不可能存在的情况
例子:
function foo (x: string | number): boolean {
if (typeof x === 'string') {
return true
} else if (typeof x === 'number') {
return false
}
return fail('error')
}
function fail(msg: string): never {
throw new Error(msg)
}
能不能把上面这个例子的never改成void,改成void之后: 会有个报错不能将类型“void”分配给类型“boolean”。。但是类型never是可以分配给类型boolean的。
never 和 void有什么不同:
void 表示 没有任何类型
never 表示 永远不存在的值的类型。
当一个函数返回空值时,它的返回值为void类型
当一个函数永不返回时或总是抛出错误时,它的返回值为never类型
void类型可以被赋值(当strictNullChecking 为 false时)
never除了never本身以外,其他任何类型不能赋值给never