never
never 永不存在的值得类型,不好理解,以实例为例:
函数
返回never的函数必须存在无法到达的终点,更不好理解,这里并不是指没有返回值
而是指会抛出、返回错误或者无限循环
// 返回never的函数必须存在无法达到的终点 function error(message: string): never { throw new Error(message); } // 推断的返回值类型为never function fail() { return error("Something failed"); } // 返回never的函数必须存在无法达到的终点 function infiniteLoop(): never { while (true) { } }
变量
永不为真的束缚(??)
常见于条件类型
type Exclude<T, U> = T extends U ? never : T; // 相当于: type A = 'a' type A = Exclude<'x' | 'a', 'x' | 'y' | 'z'>
也常见于
let x:never = (()=>{ throw new Error('exception')})();