never类型用于表示不应该存在或无法达到预期的状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// 没有谁能既是string又是number,所以A被推断成了never类型
type A = string & number

// 联合类型中会直接忽略never,所以B被推断成了void | number
type B = void | number | never

// 因为必定抛出异常,所以error函数将不会有返回值
function error(message:string):never {
throw new Error(message)
}

// 因为存在死循环,所以loop函数将不会有返回值
function loop():never {
while(true) {}
}

type kun = "唱" | "跳" | "rap" | "篮球"
function kun(value:kun) {
switch(value) {
case "唱":
console.log("只因你实在是太美")
break
case "跳":
console.log("再多一眼看一眼就会爆炸")
break
case "rap":
console.log("第一次呀变成这样的我")
break
case "篮球":
console.log("你要我怎么去否认")
break
default:
console.log("You're not kun, who are you???")
// 兜底逻辑,当分支缺失时,可以用来提示其他开发者添加分支
const error:never = value
break
}
}