I don't understand why type guard doesn't work in the example below...
When we have these interfaces,
interface ParamA {
name: 'A';
aaa: boolean;
}
interface ParamB {
name: 'B';
bbb: number;
}
Good
function func(param: ParamA | ParamB) {
switch (param.name) {
case 'A':
const aaa = param.aaa;
console.log(aaa); // boolean
break;
case 'B':
const bbb = param.bbb;
console.log(bbb); // number
break;
default:
break;
}
}
Bad
function func(param: ParamA | ParamB) {
const name = param.name; // just rewrite here
switch (name) {
case 'A':
const aaa = param.aaa;
// ^^^
console.log(aaa);
break;
case 'B':
const bbb = param.bbb;
// ^^^
console.log(bbb);
break;
default:
break;
}
}
Compiler throws errors like Property 'aaa' does not exist on type 'ParamB'. I do not think there should be a difference in behaviors whether I can put it in a variable.
The version of TypeScript using is 2.8.3.
Can anyone explain this?