Typescript: Свойство получателя ES6 не существует при использовании типов объединения

Созданный на 9 июн. 2016  ·  1Комментарий  ·  Источник: microsoft/TypeScript

Версия TypeScript:

по ночам (1.9.0-dev.20160217)

Код

class Example {
  get foo() {
    return true;
  }

  baz(example: Example) {
    example.foo;
  }

  bar(example: Example | Object) {
    example.foo; // error TS2339: Property 'foo' does not exist on type 'Example | Object'.
  }
}

Ожидаемое поведение:

example.foo не вызовет ошибки ни в одном из методов.

Фактическое поведение:

example.foo когда example равно Example | Object выбрасывает:

error TS2339: Property 'foo' does not exist on type 'Example | Object'.
Question

Самый полезный комментарий

Это нормальное поведение TypeScript, поскольку он защищает вас от чего-то, что может не иметь .foo .

Если вы хотите, чтобы это работало, вам нужно сузить тип до того, что содержит .foo :

class Example {
  get foo() {
    return true;
  }

  baz(example: Example) {
    example.foo;
  }

  bar(example: Example | Object) {
    if (example instanceof Example) {
      example.foo;
    }
  }
}

>Все замечания

Это нормальное поведение TypeScript, поскольку он защищает вас от чего-то, что может не иметь .foo .

Если вы хотите, чтобы это работало, вам нужно сузить тип до того, что содержит .foo :

class Example {
  get foo() {
    return true;
  }

  baz(example: Example) {
    example.foo;
  }

  bar(example: Example | Object) {
    if (example instanceof Example) {
      example.foo;
    }
  }
}
Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

blendsdk picture blendsdk  ·  3Комментарии

bgrieder picture bgrieder  ·  3Комментарии

dlaberge picture dlaberge  ·  3Комментарии

jbondc picture jbondc  ·  3Комментарии

remojansen picture remojansen  ·  3Комментарии