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?
3 Réponses :
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
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).
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') } }
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') } }
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 pasoui 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 pasMerci @ JózefPodlecki, c'est très utile.