I持っている書籍https://hamednourhani.gitbooks.io/typescript-book/活字体の制御フロー解析
interface Square {
kind: "square";
size: number;
}
interface Rectangle {
kind: "rectangle";
width: number;
height: number;
}
interface Circle {
kind: "circle";
radius: number;
}
type Shape = Square | Rectangle | Circle;
//Type of function: function area1(s: Square | Rectangle | Circle): number | undefined
function area1(s: Shape) {
if (s.kind === "square") {
return s.size * s.size;
}
else if (s.kind === "rectangle") {
return s.width * s.height;
}
else if (s.kind === "circle") {
return Math.PI * s.radius * s.radius;
}
else {
//Type 'Square | Rectangle' is not assignable to type 'never'.
const _exhaustiveCheck: never = s;
}
}
//Function lacks ending return statement and return type does not include 'undefined'.
function area2(s: Shape): number {
switch (s.kind) {
case "square": return s.size * s.size;
case "rectangle": return s.width * s.height;
case "circle": return Math.PI * s.radius * s.radius;
default: const _exhaustiveCheck: never = s; //Type of s is 'never'
}
}
質問(--strictNullChecks)から、次のコード:2つの機能s
で
- なぜ式で
_exhaustiveCheck: never = s
は異なるタイプがありますか?どちらの場合でも、はnever
と予想されました。 - なぜ
area2
関数は返品タイプnumber | undefined
を持っていますか?未定義の私にはここで決して起こることができないようです。私が間違っている?
は一種である、それは面倒な質問が判明したとして、これを答えるためにありがとうございました。私はおそらく何かを台無しにして、この問題を 's'である' Square |最後のブロックの「長方形」を選択します。申し訳ありませんが、次回は問題が残っていて新鮮な表情を見せてから質問を投稿します。私はまたあなたの本の版を読んで、間違った版であることに気付かなかった:-) –