TypeScript--Never
Never
never
是指没法正常结束返回的类型。
- 一个必定会报错或者死循环的函数会返回这样的类型。
// ⚠️never
function errorNever(): never {
throw new Error('error')
}
- 永远没有相交的类型
// ⚠️never
type CrossNever1 = 'boy' & 'girl'
// ⚠️never
type CrossNever2 = 1 & 2
// ⚠️never
type CrossNever3 = true & false
- 与
never
相交的类型
// ⚠️never
type CrossNever1 = 'boy' & never
// ⚠️never
type CrossNever2 = 1 & never
// ⚠️never
type CrossNever3 = true & never
// ⚠️never
type CrossNever4 = {name: string} & never
- 任何类型联合上
never
类型,还是原来的类型
// 'string'
type UnionNever1 = 'string' | never
// 1 | 2
type UnionNever2 = 1 | 2 | never
// true | false
type UnionNever3 = true | false | never
// {age: number}
type UnionNever4 = {age: number} | never
其它特性
- 在一个函数中调用了返回
never
的函数后,之后的代码都会变成Unreachable code detected.
function unReachable() {
errorNever()
// ⚠️Unreachable code detected.
const someObject = 'someObject'
console.log(someObject)
}
- 无法把其他类型赋给
never
let obj_never: never
// ❌错误
// Type 'string' is not assignable to type 'never'.
obj_never = 'string'
// ❌错误
// Type 'null' is not assignable to type 'never'.
obj_never = null
// ❌错误
// Type 'undefined' is not assignable to type 'never'.
obj_never = undefined
let obj_any: any = 'any'
// ❌错误
// Type 'any' is not assignable to type 'never'.
obj_never = obj_any