interface Foo {
kind: 'foo';
diffType: string;
fooOnly: boolean;
shared: number;
}
interface Bar {
kind: 'bar';
diffType: number;
barOnly: boolean;
shared: number;
}
function handle(input: Foo | Bar2) {
// 报错,并没有起到区分的作用,在两个代码块中 input 都是 Foo | Bar
if (typeof input.diffType === 'string') {
input.fooOnly; //类型“Foo | Bar”上不存在属性“fooOnly”。类型“Bar”上不存在属性“fooOnly”。
} else {
input.barOnly; // 类型“Foo | Bar”上不存在属性“barOnly”。类型“Foo”上不存在属性“barOnly”
}
}
Foo和Bar的diffType是不同的ts类型,为什么用。typeof input.diffType === “string",无法分辨Foo和Bar呀?