машинописный теговый союз в общем - PullRequest
0 голосов
/ 12 июня 2018

Как сделать эту компиляцию без ошибок?Мы используем TypeScript 2.9.1.

interface IFoo {
  type: 'foo';
  foo: string;
}

interface IBar {
  type: 'bar';
  bar: string;
}

type FooBar = IFoo | IBar;

class Getter<T extends FooBar> {
  private data: T;

  constructor(data: T) {
    this.data = data;
  }

  public getMe(): string {
    const { data } = this;
    // Property 'foo' does not exist on type 'T'.
    // Property 'bar' does not exist on type 'T'.
    return data.type === 'foo' ? data.foo : data.bar;
  }
}

1 Ответ

0 голосов
/ 12 июня 2018

Компилятор не будет сужать переменные, имеющие тип параметра типа.Вы можете ввести переменную явно, и это даст код для компиляции:

 public getMe(): string {
    const data :FooBar = this.data;
    return data.type === 'foo' ? data.foo : data.bar;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...