试图弄清楚当给定类型具有多个实现并且在任何给定时间只有一个处于活动状态时,如何使编译器不会出错。
例如,我有以下两个接口:
interface fooA {
kind: 'fooA',
a: string,
b: string
c: string
}
interface fooB {
kind: 'fooB',
c: string
d: string,
e: string
}
export type IFoo = fooA | fooB
现在我的方法之一是处理作为参数传入的道具,并且在任何给定时间,这两个接口中只有一个是有效的,我希望打字稿仅针对当前处于活动状态的接口内部条件检测类型。 所以看起来像这样...
someClass {
constructor(foo: IFoo){
switch(foo.kind){
case 'fooA': {
// do something with params
console.log(`${foo.a}-${foo.b}-${foo.c}`)
break;
}
case 'fooB': {
// do something with params
console.log(`${foo.c}-${foo.d}-${foo.e}`)
break;
}
}
}
}
因此,通过此实现,我会收到错误消息:
Property 'a' does not exist on type 'foo'.
Property 'a' does not exist on type 'fooB'.ts(2339)
似乎很清楚fooB
不具有属性a
,但是可以使用Typescript配置多个基于条件的接口,因此接口fooA
在第一种情况下是有效的,而fooB
在第二种情况下处于活动状态。
答案 0 :(得分:0)
您应该能够使用Typescript文档中有关Type Guards的方法之一。
使用类型谓词,或使用typeof
,instanceof
或in
,Typescript可以评估条件以缩小变量的可能类型。
答案 1 :(得分:0)
好的,所以我认为我已经解决了问题。问题是我的结构与上述类似,但在案例陈述中有错字。我猜还有一个不进行直接字符串比较的原因。 谢谢大家