分解するとtype guardが効かない問題
code:ts
type Action =
| {
type: 'A';
payload: string;
}
| {
type: 'B';
payload: number;
};
// 意図した挙動をする例
function f1(action: Action) {
switch (action.type) {
case 'A':
action.payload; // type: string
break;
case 'B':
action.payload; // type: number;
break;
}
}
// 意図しない挙動をする例
function f2({type, payload}: Action) {
switch (type) {
case 'A':
payload; // type: string | number
break;
case 'B':
payload; // type: string | number
break;
}
}
}
コンパイラの都合上仕方ないとはいえ、ついつい分解したくなるため地味に面倒に感じてしまうodiak.icon
これはたまに思うが TypeScriptコンパイラさんに「複数の変数の型の関係」を保持しておいてもらうのは無理(コンパイル時間がめっちゃ増えそう)なので仕方ない(ぇ