interface A {
type: 'a'
}
interface B {
type: 'b'
}
type All = A | B
function handleValue(val: All) {
switch (val.type) {
case 'a':
// 这里 val 被收窄为 A
break
case 'b':
// val 在这里是 B
break
default:
// val 在这里是 never
const exhaustiveCheck: never = val
break
}
}