2016-11-10 1 views
3

Ich habe tslint seit geraumer Zeit mit no-null-keyword aktiviert. Vor kurzem habe ich auf Typescript 2.0 aktualisiert und aktiviert --strictNullChecking. Betrachtet man jedoch die lib.d.ts des Typoskripts, scheint es unmöglich, no-null-keyword aktiviert zu halten (auf den ersten Blick), da das Ergebnis einiger Aufrufe null sein kann. Zum Beispiel:tslint no-null-Schlüsselwort und Typoskript lib.d.ts mit strenger Null-Überprüfung

const result: RegExpExecArray | null = regex.exec(regexStr); 

if (result === null) { // <-- tslint complains about this check 
    throw new Error("Foo location: result of regex is null."); 
} 

// or 
// if (result !== null) { 
//  ...do something 
// } 

Die Frage ist, was ist die rechte Ding-to-do?

Deaktivieren no-null-keyword für tslint?

Verwenden Sie einen Hack (?):

const result: RegExpExecArray = regex.exec(regexStr)!; 

if (result == undefined) { // Will check if result is undefined or null 
    throw new Error("Foo location: result of regex is null."); 
} 

Oder etwas anderes?

Antwort

2

no-null-keyword ist nur eine Flusenregel. Der Hauptzweck besteht darin, Sie von der zusätzlichen Komplexität der Verwendung von undefined und null für einen oft ähnlichen Zweck abzuhalten.

Aber es entfernt es nicht für Ihre Verkäufer Codebasis, und es wird in vielen Bibliotheken verwendet.

result == undefined ist in der Tat ein perfekt gültiges JS-Idiom, wenn Sie nach Null und undefinierten Werten suchen müssen. Dies wird nicht als Hack (AFAIK) betrachtet und ist der einfachen aber gefährlichen Falsy-Prüfung vorzuziehen: if (!result) {..}.

tslint erlaubt sogar eine Ausnahme für seine === Regel:

"triple-equals": [true, "allow-undefined-check"]

+0

Ja, das ist genau das, was ich je tat, da ich die Frage gestellt: ' "Triple-Gleichen": [true" allow-undefined-check "]' mit dem Code 'foo == undefined' oder' foo! = undefined' zusammen mit einem entsprechenden Kommentar, der erklärt, warum. – vladeck