0
votes

Typescript Boolean-Comparaison donne mal de résultats

J'ai un problème étrange: dans l'une de mes classes, il y a une propriété lisibilité de type booléen. Lorsque j'essaie de vérifier cette propriété, je reçois des résultats inattendus. Ici "SA Échantillon de code: xxx

et voici la sortie résultante: xxx

Qu'est-ce que je manque?


5 commentaires

Je pense qu'il s'agit d'utiliser "+" pour concaténer les valeurs. Essayez: console.log (test, "->", test2)


Est le contenu de this.vorgang.isek une "chaîne" comme dans "vrai" ou "faux" ?


Vous pouvez utiliser !! Testez pour obtenir sa valeur booléenne. Si le test est indéfini, il retournera faux, vrai sinon.


essayez let test2 = test? vrai: faux;


Merci, les gars, après une enquête supplémentaire, j'ai découvert que, en fait, le test contient une chaîne, bien que la propriété ainsi que (quant à elle) la variable est déclarée en tant que booléenne. Je ne sais pas pourquoi cela est possible, mais c'est.


3 Réponses :


0
votes

Cela peut arriver en cas de chaînes. Votre this.vorgang.isek code> pourrait être une chaîne. P>

Si oui, remplacez simplement votre ligne let test2 = test? TRUE: FAUX; code> avec let Test4 = test3 == true? vrai: faux; code>, où == vérifiera la valeur mais pas le type de données em> p>

Votre extrait de travail serait similaire à ce qui suit - p>

p>

// getting it static
let test = "false";
// Just for testing
let test2 = test == true ? true : false;
console.log(test + ' -> ' + test2);


0 commentaires

0
votes

C'est une propriété booléenne: xxx

la sortie est correcte alors que ma comparaison ne fonctionne pas. Cela me rend fou.


1 commentaires

Vous êtes neuf ici :). S'il vous plaît ne postez pas une réponse pour commenter une autre réponse. Ce n'est pas un forum. Il y a un lien "Ajoutez un commentaire" au-dessous de chaque réponse. Vous pouvez simplement commenter une réponse ou modifier votre question pour ajouter des informations supplémentaires, puis ajouter un commentaire pour indiquer que vous avez terminé votre question.



0
votes

Il n'y a qu'une seule explication possible: à l'exécution, la variable code> code> contient la chaîne 'FAUX' code>.

console.log('Type of test:', typeof test);


4 commentaires

Merci, j'ai essayé quelque chose de similaire dans le getter, mais il n'a pas résolu le problème. Pendant ce temps, j'ai trouvé une fonction appelée IstrueProperty () dans ionic-angular / utils / utils, qui a fait l'affaire sur le côté de la consommation. Mais je ne peux toujours pas comprendre pourquoi une propriété booléenne se transforme en une chaîne sans tytecast explicite.


@ @Deddyh parce que votre "propriété booléenne" n'est pas un temps d'exécution booléen. Un type déclaré avec Typescript ne garantit rien au moment de l'exécution. Il est facile de tromper le compilateur TS. Par exemple, vous pouvez faire: STR = 'FAUX'; Soit Test: Boolean = STR comme tout; → Ici la variable test est un booléen à l'heure de compilation mais une chaîne au moment de l'exécution. En particulier, vous pouvez avoir ce problème chaque fois que vous prenez une variable à partir d'un json.parse () résultat.


@ @Deddyh En outre, l'opérateur && en JavaScript peut être délicat. blog.marisschulz.com/2016/ 05/25 / ...


Je vois qu'il y a encore beaucoup à apprendre de moi. Je suis tout à fait nouveau à JavaScript / TypeScript, généralement je code à Pascal, qui est vraiment fortement tapé. Mais les erreurs sont là pour être faites une fois et plus jamais, n'est-ce pas? :-)