never类型
因为a定义的时候给了两种类型,所以Ts会自动解析,认为它是不可能的,所以给了一个never类型,这种类型会报错。
TypeScripe 将使用 never 类型来表示不应该存在的状态
// 返回never的函数必须存在无法达到的终点
// 因为必定抛出异常,所以 error 将不会有返回值
function error(message: string): never {
throw new Error(message);
}
// 因为存在死循环,所以 loop 将不会有返回值
function loop(): never {
while (true) {
}
}
never 与 void
的差异
//void类型只是没有返回值 但本身不会出错
function Void(): void {
console.log();
}
//只会抛出异常没有返回值
function Never(): never {
throw new Error('aaa')
}
never 类型的一个应用场景
interface A {
type: "wang"
}
interface B {
type: "li"
}
type All = A | B ;
function handleValue(val: All) {
switch (val.type) {
case 'wang':
break;
case 'li':
break
default:
//兜底逻辑 一般是不会进入这儿如果进来了就是程序异常了
const check:never = val;
break
}
}
如果新加了一个接口,必须手动去处理switch,否则就会报错