Nullable Types ('strictNull')
Teil des Abschnitts Einführung in TypeScript der JavaScript-Journey von Coddy. Lektion 71 von 73.
Standardmäßig erlaubt TypeScript, dass null und undefined jedem Typ zugewiesen werden können, was zu Laufzeitfehlern führen kann. Die Compiler-Option strictNullChecks ändert dieses Verhalten, indem sie null und undefined zu ihren eigenen, eigenständigen Typen macht.
Wenn strictNullChecks aktiviert ist, müssen Sie explizit null oder undefined in Ihren Typannotationen angeben, wenn Sie diese Werte zulassen möchten:
// Ohne strictNullChecks - dies wäre erlaubt
let name: string = null; // Fehler mit strictNullChecks!
// Mit strictNullChecks - Sie müssen explizit sein
let name: string | null = null; // Jetzt funktioniert diesDies zwingt Sie dazu, potenzielle null-Werte zu behandeln, bevor Sie sie verwenden. Sie können keine Methoden aufrufen oder auf Eigenschaften eines Wertes zugreifen, der null sein könnte, ohne dies vorher zu prüfen:
function processName(name: string | null) {
// Dies würde einen Fehler verursachen
// console.log(name.toUpperCase());
// Sie müssen zuerst prüfen
if (name !== null) {
console.log(name.toUpperCase()); // Sicher zu verwenden
}
}Diese Compiler-Option hilft dabei, die häufigen „Cannot read property of null“-Laufzeitfehler zu verhindern, indem sie diese bereits zur Kompilierzeit abfängt, was Ihren Code zuverlässiger und vorhersehbarer macht.
Aufgabe
EinfachErstellen Sie eine Funktion, die Benutzerprofildaten sicher verarbeitet, welche null-Werte enthalten könnten. Diese Herausforderung demonstriert, wie strictNullChecks Sie dazu zwingt, Nullable-Typen explizit zu behandeln.
Erstellen Sie eine Funktion namens getUserDisplayName, die:
- Einen Parameter
fullNamevom Typstring | nullentgegennimmt - Den vollständigen Namen zurückgibt, wenn dieser nicht
nullist "Anonymous User"zurückgibt, wenn der vollständige Namenullist- Einen expliziten Rückgabetyp
stringhat
Erstellen Sie eine zweite Funktion namens formatUserEmail, die:
- Einen Parameter
emailvom Typstring | nullentgegennimmt - Die E-Mail in Kleinbuchstaben zurückgibt, wenn sie nicht
nullist "No email provided"zurückgibt, wenn die E-Mailnullist- Einen expliziten Rückgabetyp
stringhat
Erstellen Sie eine dritte Funktion namens getUserInfo, die:
- Zwei Parameter entgegennimmt:
namevom Typstring | nullundemailvom Typstring | null - Beide vorherigen Funktionen verwendet, um die Parameter zu verarbeiten
- Einen formatierten String zurückgibt:
"Name: [processed name], Email: [processed email]" - Einen expliziten Rückgabetyp
stringhat
Testen Sie Ihre Funktionen mit den folgenden Daten:
- Rufen Sie
getUserDisplayName("John Smith")auf und geben Sie das Ergebnis aus - Rufen Sie
getUserDisplayName(null)auf und geben Sie das Ergebnis aus - Rufen Sie
formatUserEmail("ALICE@EXAMPLE.COM")auf und geben Sie das Ergebnis aus - Rufen Sie
formatUserEmail(null)auf und geben Sie das Ergebnis aus - Rufen Sie
getUserInfo("Bob Johnson", "bob@test.com")auf und geben Sie das Ergebnis aus - Rufen Sie
getUserInfo(null, null)auf und geben Sie das Ergebnis aus - Rufen Sie
getUserInfo("Sarah Wilson", null)auf und geben Sie das Ergebnis aus
Probier es selbst
// TODO: Schreibe deinen Code hier
// Erstelle die Funktion getUserDisplayName, die fullName (string | null) entgegennimmt und einen string zurückgibt
// Erstelle die Funktion formatUserEmail, die email (string | null) entgegennimmt und einen string zurückgibt
// Erstelle die Funktion getUserInfo, die name und email (beide string | null) entgegennimmt und einen string zurückgibt
// Teste die Funktionen und gib die Ergebnisse aus
console.log(getUserDisplayName("John Smith"));
console.log(getUserDisplayName(null));
console.log(formatUserEmail("ALICE@EXAMPLE.COM"));
console.log(formatUserEmail(null));
console.log(getUserInfo("Bob Johnson", "bob@test.com"));
console.log(getUserInfo(null, null));
console.log(getUserInfo("Sarah Wilson", null));Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Einführung in TypeScript
1Erste Schritte mit TS
Was ist TypeScript?Warum TypeScript verwenden?Dein erster TypeScript-CodeKompilierungsprozess & FehlerZusammenfassung: Einführung in TS4Arbeiten mit Funktionen
Typisierung von Parametern & RückgabewertenTypisierung von Arrow-FunktionenDer Rückgabetyp 'void'Optionale Parameter mit '?'Standard-ParameterwerteTypisierung von Rest-ParameternDefinieren von FunktionstypenZusammenfassung: Typisierte Funktionen erstellen2Basis-Typen
Basis-Typen: str, num, booleanDer 'any'-Typ: Der NotausgangDer 'unknown'-TypArbeiten mit 'null' & 'undef'Typinferenz in der PraxisExplizite Typ-AnnotationenZusammenfassung: Übung zu Basis-Typen5Typen: Aliase, Unions & Intersections
Typ-Aliase für primitive DatentypenUnion-Typen ('|')Arbeiten mit Union-TypenLiteral-TypenIntersection-Typen ('&')Kombinieren von Typ-AliasenZusammenfassung: Fortgeschrittene Typ-Kombinationen8Enums
Was ist ein numerisches Enum?Numerische Enums verwendenWas ist ein String-Enum?String-Enums verwendenHeterogene EnumsZusammenfassung: Enums verwenden11Fortgeschrittene Themen
Type AssertionsType Guards: in & instanceofDer 'never'-TypNullable Types ('strictNull')Index-Signaturen für ObjekteRecap: Typen verfeinern3Datenstruktur: Arrays & Tupel
Typisierte Arrays'readonly'-Modifikator für ArraysWas ist ein Tupel?Deklarieren von und Zugriff auf TupelDestrukturierung von TupelnReadonly-TupelMehrdimensionale typisierte ArraysSpread-Operator mit ArraysZusammenfassung: Arrays und TupelÜbe selbstständig: TypeScript-Playground