如果我具有以下界面:
interface A {
propA: string;
propB: string;
}
interface B extends A {
propC: string;
}
我还有另一个属性,例如:
interface Props {
x: A | B
}
如何检查x的接口类型是A还是B?在这种情况下,由于这些不是课程,我是否需要进行深度比较?
我正在研究几种不同的方法,例如用户定义的类型防护,或者可能使用联合类型,但没有骰子。
答案 0 :(得分:1)
在并集类型中,只要您能找到一个鉴别符(具有特定类型或仅在并集内的一种类型中存在的字符),就可以在类型保护器内使用它:
interface A {
propA: string;
propB: string;
}
interface B extends A {
propC: string;
propD: string;
}
interface Props {
x: A | B
}
const props: Props = {
x: null as any
}
if ('propC' in props.x) {
// TypeScript here assumes it is B
console.log(props.x.propC) // works
console.log(props.x.propD) // also works
} else {
// TypeScript here assumes it is A
console.log(props.x.propC) // error
console.log(props.x.propD) // also error
console.log(props.x.propA) // works
}