Da TypeScript stark typisiert ist, wird einfach if () {}
nach gesucht null
und es undefined
klingt nicht richtig.
Hat TypeScript dafür eine spezielle Funktion oder Syntax?
typescript
null-check
David Liu
quelle
quelle
Since TypeScript is strongly-typed
Ich konnte dies nicht in den Dokumenten finden und ich habe Zweifel daran ...Antworten:
Mit einem Jonglier-Check können Sie beide
null
undundefined
mit einem Schlag testen :Wenn Sie eine strenge Prüfung verwenden, gilt diese nur für Werte, die auf
null
undefinierte Variablen festgelegt sind, und wird nicht als wahr ausgewertet:Sie können dies mit verschiedenen Werten anhand dieses Beispiels versuchen:
Ausgabe
quelle
"false" == false
Eine nicht leere Zeichenfolge wie "false" wird ausgewertettrue
.if(x)
Style-Checks, aber nichtif(x == null)
, was nur fängtnull
undundefined
. Überprüfen Sie,var c: number = 0; check(c, 'b');
ob es nicht "nully" istnull
, oderundefined
.wird bewerten,
true
wennvalue
nicht:null
undefined
NaN
''
0
false
Typoskript enthält Javascript-Regeln.
quelle
TypeScript versteht die JavaScript-Version vollständig
something == null
.TypeScript schließt sowohl
null
und als auch korrekt ausundefined
solche Überprüfungen .Mehr
https://basarat.gitbook.io/typescript/recap/null-undefined
quelle
myVar == null
. Nur eine weitere Option.== null
ist der richtige Weg, um auf null und undefiniert zu testen.!!something
ist ein nutzloser Zwang in einer Bedingung in JS (nur verwendensomething
).!!something
zwingt auch 0 und '' zu false, was Sie nicht tun möchten, wenn Sie nach null / undefined suchen.Ich habe verschiedene Tests auf dem Typoskript-Spielplatz durchgeführt:
http://www.typescriptlang.org/play/
gibt:
damit:
quelle
Ich denke, diese Antwort muss aktualisiert werden. Überprüfen Sie den Bearbeitungsverlauf auf die alte Antwort.
Grundsätzlich haben Sie drei aufgeschobene Fälle null, undefiniert und nicht deklariert (siehe den folgenden Ausschnitt).
Sie erhalten eine Fehlermeldung, dass die Variable
message
undefiniert (auch als nicht deklariert bezeichnet) ist. Der Typescript-Compiler sollte dies natürlich nicht zulassen, aber WIRKLICH kann Sie nichts davon abhalten.Der Compiler kompiliert gerne den obigen Code. Wenn Sie also sicher sind, dass alle Variablen deklariert sind, können Sie dies einfach tun
Der obige Code prüft auf
null
undundefined
, ABER falls diemessage
Variable (aus Sicherheitsgründen) nicht deklariert ist, können Sie den folgenden Code berücksichtigenHinweis: Die Reihenfolge hier
typeof(message) !== 'undefined' && message !== null
ist sehr wichtig. Sie müssenundefined
zuerst den Status überprüfen, da er genau so ist wiemessage != null
, danke @Jaider.quelle
if(typeof something !== 'undefined' && something !== null){...}
In TypeScript 3.7 haben wir jetzt optionales Verketten und Nullish Coalescing , um gleichzeitig null und undefiniert zu prüfen. Beispiel:
Dieser Code prüft, ob foo definiert ist, andernfalls wird undefiniert zurückgegeben
alter Weg :
diese:
Mit optionaler Verkettung wird:
Eine weitere neue Funktion ist Nullish Coalescing , Beispiel:
Alter Weg:
quelle
Vielleicht möchten Sie es versuchen
mit
!!
.Erläuterung
Der erste
!
verwandelt Ihren Ausdruck in einenboolean
Wert.Dann
!someValue
ist,true
obsomeValue
es falsch ist undfalse
obsomeValue
es wahr ist . Dies könnte verwirrend sein.Durch Hinzufügen eines weiteren
!
, jetzt ist der Ausdruck ,true
wennsomeValue
ist truthy undfalse
wennsomeValue
ist falsy , die viel einfacher zu verwalten ist.Diskussion
Warum beschäftige ich mich jetzt mit so
if (!!someValue)
etwas?if (someValue)
mir das gleiche Ergebnis gebracht hätte?Denn
!!someValue
ist genau ein boolescher Ausdruck, währendsomeValue
absolut alles sein könnte. Diese Art des Ausdrucks ermöglicht es nun, Funktionen (und Gott, die wir brauchen) wie folgt zu schreiben:anstatt:
Ich hoffe, es hilft.
quelle
!!'false'
ist in der Tat,true
weil'false'
es eine gültige Zeichenfolge istDenn
Typescript 2.x.x
Sie sollten es folgendermaßen tun (mit Type Guard ):tl; dr
Warum?
Auf diese Weise
isDefined()
wird der Variablentyp berücksichtigt und der folgende Code würde wissen, dass diese Prüfung berücksichtigt wird.Beispiel 1 - Grundprüfung:
Beispiel 2 - Typen respektieren:
quelle
Es ist gemein! Daten
quelle
true
oderfalse
nur ausgewertet werden . Wenn Sie einen Booleschen Wert mit einernull
Zuweisung oder einemundefined
Wert haben, wird der Wert in beiden Fällen als ausgewertetfalse
.Wenn Sie TypeScript verwenden, ist es besser, den Compiler nach Nullen und Undefinierten (oder deren Möglichkeit) suchen zu lassen, als zur Laufzeit nach ihnen zu suchen. (Wenn Sie zur Laufzeit überprüfen möchten, verwenden Sie einfach, wie viele Antworten anzeigen
value == null
.)Verwenden Sie die Kompilierungsoption
strictNullChecks
, um den Compiler anzuweisen, mögliche Null- oder undefinierte Werte zu drosseln. Wenn Sie diese Option gesetzt, und dann gibt es eine Situation , wo Sie es möchten null ermöglichen und nicht definiert, können Sie die Art , wie definierenType | null | undefined
.quelle
Wenn Sie übergeben möchten ,
tslint
ohne Einstellungstrict-boolean-expressions
zuallow-null-union
oderallow-undefined-union
müssen Sie die VerwendungisNullOrUndefined
vonnode
‚s -util
Modul oder rollen Sie Ihre eigenen:Nicht gerade syntaktischer Zucker, aber nützlich, wenn Ihre tslint-Regeln streng sind.
quelle
Eine schnellere und kürzere Notation für
null
Schecks kann sein:Diese Zeile entspricht:
Besonders wenn Sie viel
null
Scheck haben, ist es eine schöne kurze Notation.quelle
Ich hatte dieses Problem und einige der Antworten funktionieren gut,
JS
aber nicht fürTS
hier ist der Grund.Das ist alles gut, da JS keine Typen hat
In TS , wenn die Variable nicht definiert wurde , mit ,
null
wenn Sie versuchen, das zu überprüfen ,null
dietslint
| Compiler wird sich beschweren.quelle
Spät, um diesem Thread beizutreten, aber ich finde diesen JavaScript-Hack sehr praktisch, um zu überprüfen, ob ein Wert undefiniert ist
quelle
Normalerweise mache ich den Jonglier-Check, wie Fenton bereits besprochen hat . Um die Lesbarkeit zu verbessern , können Sie isNil von ramda verwenden.
quelle
Wenn Sie NUR null und undefinierte Werte vergleichen möchten , verwenden Sie den ausführlichen Beispielcode als Referenz:
Wenn dies
incomingValue
nicht deklariert ist, sollte TypeScript eine Ausnahme zurückgeben. Wenn dies deklariert, aber nicht definiert ist, wird dieconsole.log()
wird "Eingehender Wert ist: undefiniert" zurückgegeben. Beachten Sie, dass wir nicht den strengen Gleichheitsoperator verwenden.Der "richtige" Weg (überprüfen Sie die anderen Antworten auf Details), wenn der
incomingValue
keinboolean
Typ ist, bewerten Sie einfach, ob sein Wert wahr ist, dies wird gemäß dem Typ der Konstanten / Variablen ausgewertet. Einetrue
Zeichenfolge muss mithilfe der= ''
Zuweisung explizit als Zeichenfolge definiert werden . Wenn nicht, wird es als bewertetfalse
. Lassen Sie uns diesen Fall im selben Kontext überprüfen:quelle
Sie können verwenden
quelle
Alle,
Die Antwort mit den meisten Stimmen funktioniert nicht wirklich, wenn Sie mit einem Objekt arbeiten. In diesem Fall funktioniert die Prüfung nicht, wenn eine Eigenschaft nicht vorhanden ist. Und das war das Problem in unserem Fall: siehe dieses Beispiel:
Ergebnis:
plunkr link: https://plnkr.co/edit/BJpVHD95FhKlpHp1skUE
quelle
null
. Versuchen Sie FolgendesDa TypeScript eine typisierte Obermenge von ES6-JavaScript ist. Und lodash sind eine Bibliothek von Javascript.
Mit lodash können Sie überprüfen, ob der Wert null oder undefiniert ist
_.isNil()
.Argumente
Wert (*): Der zu überprüfende Wert.
Kehrt zurück
(boolean) : Gibt true zurück, wenn der Wert nullish ist, andernfalls false.
Beispiel
Verknüpfung
Lodash Docs
quelle
Vorsicht, wenn Sie lokalen Speicher verwenden, kann die Zeichenfolge undefiniert und nicht der Wert undefiniert sein:
Personen finden dies möglicherweise hilfreich: https://github.com/angular/components/blob/master/src/cdk/coercion/boolean-property.spec.ts
quelle
Ich schreibe es immer so:
Dies wird gut funktionieren und ich denke, es ist sehr gut lesbar.
quelle
0
auch der!foo
Test bestanden wird.undefined
es sich von unterscheidetfalse
. Dies ist sehr häufig bei optionalen booleschen Funktionsparametern, bei denen Sie den allgemeinen JavaScript-Ansatz verwenden sollten:function fn(flag?: boolean) { if (typeof flag === "undefined") flag = true; /* set default value */ }
var isTrue; if(isTrue)//skips, if(!isTrue)// enters if(isTrue === undefined)//enters
. Versuchte es auch in Typoskript, mitvar isTrue:boolean
dem undefiniert war, und das gleiche, wenn prüft. @Gingi, gibt es etwas anderes an dem, was du versucht hast und was ich versucht habe?