Попытка выяснить, как заставить компилятор не выдавать ошибку, если данный тип имеет несколько реализаций, и только одна из них активна в любой момент времени.
Например, у меня есть два следующих интерфейса:
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
теперь один из моих методов имеет дело с этими реквизитами, передаваемыми в качестве аргументов, и в любой момент времени только один из этих обоих интерфейсов будет действительным, и я хочу, чтобы typcript обнаруживал только типы для текущего активного интерфейса внутриусловие. Так что это будет выглядеть примерно так ...
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
, но возможно ли настроить несколько основанных на условиях интерфейсов с машинописью, поэтому интерфейс fooA
активен в первом случае, а fooB
активен во втором случае.