2014-03-29 12 views
8

Ich weiß, dass ein einzelnes Gleichheitszeichen bedeutet Zuordnung; Doppel bedeutet Gleichheit; und dreifach bedeutet Gleichheit und den gleichen Typ.TSLint Doppel vs Dreifachgleichheit

Was ich nicht verstehe, warum das Typoskript Linter möchte mich triple Gleichheitszeichen in diesem Fall verwenden:

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

TsLint: == === sollte

Ich weiß, dass 0 eine Zahl ist und ich weiß auch, dass b eine Zahl ist (sonst bekomme ich einen Kompilierungsfehler). Warum sollte ich in diesem Fall dreifache Gleichheitszeichen verwenden?

+0

Während es in TypeScript nicht so wahrscheinlich ist, ein Problem zu verursachen, ist es ein strenger Vergleich - ich bin nicht sicher, warum Sie es nicht verwenden möchten? http://stackoverflow.com/a/359509/95190 Es ist allgemein eine gute Praxis, es in JavaScript zu verwenden. – WiredPrairie

Antwort

9

Die Typen können Sie nicht von alle Fehler von == verursacht. Insbesondere seit undefined und null sind kompatibel mit alle Arten. z.B. Folgendes ist eine falsche, wenn:

var foo:number = null; 

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

Für weitere Informationen darüber, warum diese gleich sind https://stackoverflow.com/a/359509/95190

persönlich: Ich habe diese Regel hatte deaktiviert und hatte nie irgendwelche Probleme. Ich vergleiche nicht mit true/false/null/undefined, nur if sie. Und Typoskript verhindert den Vergleich strings und numbers, so dass es kein Fehler ist, mit dem ich mich befassen muss.

2

Mit dem Triple-Gleichheitsoperator können Sie auch in Fällen speichern, in denen das resultierende Javascript aus einer externen Datei (d. H. Außerhalb der TypeScript-Umgebung) aufgerufen werden kann. Reine JS-Dateien werden nicht von tslint verarbeitet, und indem tslint die dreifache Gleichheit "benötigt", macht sie die resultierende Javascript-Datei etwas resilienter.