web-dev-qa-db-fra.com

TSLint double vs triple égalité

Je sais qu'un seul signe d'égalité signifie une affectation; double signifie égalité; et triple signifie égalité et même type.

Ce que je ne comprends pas pourquoi le linter TypeScript voudrait que j'utilise des signes d'égalité triple dans ce cas:

function gcf(a: number, b: number): number
{
    return (b == 0) ? (a) : (gcf(b, a % b));
}

TsLint: == devrait être ===

Je sais que 0 est un nombre et je sais aussi que b est un nombre (sinon j'obtiendrai une erreur de compilation). Alors pourquoi voudrais-je utiliser des signes de triple égalité dans ce cas?

22
user886079

Les types ne peuvent pas vous sauver de tous erreurs causées par ==. D'autant plus que undefined et null sont compatibles avec les types all. par exemple. ce qui suit est incorrect si:

var foo:number = null; 

if (foo == undefined) { 
    console.log('is undefined'); // actually null  
}

Pour plus d'informations sur la raison de leur égalité https://stackoverflow.com/a/359509/9519

Personnellement : J'ai désactivé cette règle et je n'ai jamais eu de problème. Je ne compare pas avec true/false/null/undefined, juste if eux. Et TypeScript empêche de comparer strings et numbers, ce n'est donc pas une erreur que je dois traiter.

23
basarat

L'utilisation de l'opérateur de triple égalité vous évite également dans les cas où le Javascript résultant peut être appelé à partir d'un fichier externe (c'est-à-dire en dehors de l'environnement TypeScript). Les fichiers JS purs ne sont pas traités par tslint, et en "exigeant" la triple égalité, tslint rend le fichier Javascript résultant un peu plus résilient.

7
Darren Oster