1
votes

Gérer null> = 0 dans Typescript

J'ai une vérification simple où je veux vérifier si la variable donnée est> = 0.

public print(value: any): void {
    if(value >= 0) {
      console.log('Greater than zero')
    }
  }

Le problème ici est que la variable entrante a la valeur nulle, alors elle deviendra véridique et enregistrez la déclaration. Y a-t-il un moyen propre de l'éviter, mais sans ajouter de vérifications supplémentaires?


10 commentaires

Quel est le problème avec un chèque supplémentaire? if (valeur! == null && valeur> = 0) {


J'obtiens un avertissement de charpie pour l'utilisation de "null" dans mon code et la construction échoue. Il suggère d'utiliser "indéfini", je ne veux pas supprimer l'avertissement de peluche, c'est pourquoi chercher des moyens alternatifs.


Number (null) est évalué à 0 afin que les astuces astucieuses ne s'appliquent pas


oui le type attendu pour la valeur est un nombre. Mais cela ne résoudra pas non plus le problème.


Il y a if (value? .ValueOf ()> = 0) si vous voulez que vos collègues lancent la papeterie dans votre direction.


lol: D @adiga ferait mieux d'aller avec le long chemin en ajoutant des vérifications supplémentaires


Que diriez-vous de if (typeof value === 'number' && value> = 0) pour le contrôle?


Merci à vous tous pour vos contributions. Je pense que l'ajout d'une vérification nulle est le meilleur et le plus compréhensible: D


utilisez simplement parseInt vérifiez si ce n'est pas NaN et ne vous inquiétez pas


Merci @ JózefPodlecki, c'est très utile.


3 Réponses :


1
votes

Je ne vois pas pourquoi vous ne voulez pas ajouter de vérification Null.

Une alternative est d'utiliser nombre au lieu de n'importe quel mais il le fera ne fonctionne que si votre ts.conf permet des vérifications strictes de null.

function print(value: number): void {
    if(value >= 0) {
      console.log('Greater than zero')
    }
}

print(null) // won't compile with strict null checks


0 commentaires

1
votes

Si votre base de code n'autorise pas l'utilisation de null , utilisez simplement undefined et utilisez une conversion implicite, comme ceci:

public print(value: any): void {
    if(value != undefined && value >= 0) {
        console.log('Greater than zero')
    }
}

Cela fonctionne car null == undefined (le double égal crée une conversion de type, alors que le triple ne l'est pas).


0 commentaires

0
votes

Vous pouvez utiliser un type guard qui assurera au compilateur que vous ne manipulez pas un null mais un nombre. De plus, cela rendra le code plus correct , car avec value: any cela signifie que vous pourriez obtenir un booléen ou une chaîne passé dans:

public print(value: any): void {
  if (typeof value !== "number")
    return;

  //value is definitely a number and not null
  if (value >= 0) {
    console.log('Greater than zero')
  }
}

Playground Lien p>

Maintenant, le code vérifie spécifiquement que vous obtenez un nombre, puis vérifie s'il est supérieur ou égal à zéro. Cela signifie qu'une valeur null ou non numérique ne sera pas traitée.

La condition de garde de type peut être combinée avec l'autre par souci de concision:

public print(value: any): void {
  if (typeof value === "number" && value >= 0) {
    console.log('Greater than zero')
  }
}


0 commentaires