2017-07-11 3 views
0

Fait: J'utilise TS v. 2.3.4. J'ai créé une fonction qui vérifie la météo une variable est définie (il faut variable comme paramètre et renvoie 'undefined' !== typeof variable). Une paix de gâteau.Fonction externe de typographie pour erreur de vérification et de compilation de type

export function IsDefined(variable: any): boolean { 
    return 'undefined' !== typeof variable; 
} 

Problème: Ci-dessous le code produit un avertissement sur la ligne 2.. L'avertissement dit L'objet est probablement indéfini.

if (IsDefined(myVar)) { 
    myVar.mockProperty = "asdf"; //Object (myVar, obviously) is possibly undefined 
} 

Question: Est-il possible de dire compilateur TS cette méthode IsDefined() contrôle variable par rapport à la valeur définie, il ne prévient pas avec des informations fausses? Existe-t-il d'autres méthodes pour contourner ce problème?

Contournements Je sais et je ne suis pas prêt à utiliser, car ils rend le code impur:

  • (<myType>myVar).mockProperty = "asdf";
  • if ("undefined" !== typeof myVar) {

Répondre

1

Vous voulez utiliser un agent de type ici . Modifier la définition de IsDefined:

export function IsDefined(variable: any): variable is {} { 
    return 'undefined' !== typeof variable; 
} 

et maintenant le compilateur sait que tout ce qui revient true de IsDefined est un objet et non undefined.

+0

Wow, fonctionnalité intéressante. J'ai dû lire les docs à la hâte;) Merci! –