在縮小範圍時,您可以将聯合的選項減少到您已删除所有可能性并且一無所有的程度。 在這些情況下,TypeScript 将使用 never 類型來表示不應該存在的狀态。
never 類型可配置設定給每種類型; 但是,沒有類型可以配置設定給 never(除了 never 本身)。 這意味着您可以使用縮小并依靠從不出現在 switch 語句中進行詳盡的檢查。
可以善用這一點進行錯誤處理。
例如,向我們的 getArea 函數添加一個預設值,該函數試圖将形狀配置設定為 never 在尚未處理所有可能的情況時引發。
interface Circle {
kind: "circle";
radius: number;
}
interface Square {
kind: "square";
sideLength: number;
}
type Shape = Circle | Square;
function getArea(shape: Shape) {
switch (shape.kind) {
case "circle":
return Math.PI * shape.radius ** 2;
case "square":
return shape.sideLength ** 2;
default:
const _exhaustiveCheck: never = shape;
return _exhaustiveCheck;
}
}
如果我們在 shape 聯合類型裡增加一個新字段,比如:
interface Triangle {
kind: "triangle";
sideLength: number;
}
會立即遇到文法錯誤:
