Typescript: A propriedade getter ES6 não existe ao usar tipos de união

Criado em 9 jun. 2016  ·  1Comentário  ·  Fonte: microsoft/TypeScript

Versão TypeScript:

todas as noites (1.9.0-dev.20160217)

Código

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'.
  }
}

Comportamento esperado:

example.foo não geraria um erro em nenhum dos métodos.

Comportamento real:

example.foo quando example é Example | Object arremessa:

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

Comentários muito úteis

Esse é o comportamento normal do TypeScript, pois está protegendo você contra algo que pode não ter um .foo .

Se quiser que isso funcione, você precisa restringir o tipo a algo que contenha .foo :

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

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

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

>Todos os comentários

Esse é o comportamento normal do TypeScript, pois está protegendo você contra algo que pode não ter um .foo .

Se quiser que isso funcione, você precisa restringir o tipo a algo que contenha .foo :

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

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

  bar(example: Example | Object) {
    if (example instanceof Example) {
      example.foo;
    }
  }
}
Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

zhuravlikjb picture zhuravlikjb  ·  3Comentários

blendsdk picture blendsdk  ·  3Comentários

MartynasZilinskas picture MartynasZilinskas  ·  3Comentários

dlaberge picture dlaberge  ·  3Comentários

Antony-Jones picture Antony-Jones  ·  3Comentários