Typescript: La propriété getter ES6 n'existe pas lors de l'utilisation de types d'union

Créé le 9 juin 2016  ·  1Commentaire  ·  Source: microsoft/TypeScript

Version TypeScript :

tous les soirs (1.9.0-dev.20160217)

Code

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

Comportement prévisible:

example.foo ne renverrait pas d'erreur dans l'une ou l'autre méthode.

Comportement réel :

example.foo quand example est Example | Object lance :

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

Commentaire le plus utile

C'est le comportement normal de TypeScript car il vous protège contre quelque chose qui pourrait ne pas avoir de .foo .

Si vous voulez que cela fonctionne, vous devez réduire le type à quelque chose qui contient .foo :

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

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

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

>Tous les commentaires

C'est le comportement normal de TypeScript car il vous protège contre quelque chose qui pourrait ne pas avoir de .foo .

Si vous voulez que cela fonctionne, vous devez réduire le type à quelque chose qui contient .foo :

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

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

  bar(example: Example | Object) {
    if (example instanceof Example) {
      example.foo;
    }
  }
}
Cette page vous a été utile?
0 / 5 - 0 notes