Имеет несколько реализаций типов, но только одна из них активна в зависимости от условий в Typescript - PullRequest
0 голосов
/ 28 октября 2019

Попытка выяснить, как заставить компилятор не выдавать ошибку, если данный тип имеет несколько реализаций, и только одна из них активна в любой момент времени.

Например, у меня есть два следующих интерфейса:

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 активен во втором случае.

Ответы [ 2 ]

0 голосов
/ 29 октября 2019

Хорошо, так что я думаю, что понял проблему. Проблема заключалась в том, что я имел структуру, аналогичную описанной выше, но имел опечатку в заявлении. Я предполагаю еще одну причину не делать прямого сравнения строк. Спасибо всем

0 голосов
/ 28 октября 2019

Вы должны быть в состоянии использовать один из методов, описанных в документации Typescript, в отношении Типовых Стражей .

Использование предикатов типа или typeof, instanceof или in, Typescript может оценивать условия для сужения возможных типов переменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...