Direkt zum Hauptinhalt springen
eLearner.app
Modul 5 · Lektion 2 von 210/14 im Kurs~15 min
Lektionen des Moduls (2/2)

Literale Typen und Assertionen

TypeScript bietet fortschrittliche Werkzeuge, um die möglichen Werte von Variablen einzuschränken und den Compiler zu zwingen, bei Bedarf spezifischere Typen zu erkennen.


Literal-Typen (Literal Types)

Ein Literal-Typ stellt einen einzelnen präzisen Wert dar (z. B. einen bestimmten String oder eine bestimmte Zahl). Sie werden meist mit Unions kombiniert:

TS
type TrafficLight = 'red' | 'yellow' | 'green';
let light: TrafficLight;

light = 'red'; // OK
light = 'blue'; // Errore: "blue" non è assegnabile a TrafficLight

Typ-Assertionen (as)

Manchmal verfügen Sie über Informationen zu einem Typ, die TypeScript zur Kompilierzeit nicht kennen kann. In diesen Fällen können Sie eine Typ-Assertion mit dem Schlüsselwort as verwenden:

TS
const myCanvas = document.getElementById('main_canvas') as HTMLCanvasElement;

Die Assertion sagt dem Compiler: „Vertrau mir, ich weiß, dass dieses Element ein HTMLCanvasElement ist“. Es führt zur Laufzeit keine Prüfungen oder Typumwandlungen (Casts) durch; es dient nur dazu, dem Type-Checker zu helfen.


Const-Assertionen (as const)

Wenn wir ein Objekt oder ein Array mit const deklarieren, erlaubt es TypeScript dennoch, dessen interne Eigenschaften zu ändern. Durch das Hinzufügen von as const am Ende wird die gesamte Struktur eingefroren und schreibgeschützt (readonly) gemacht, wodurch alle Eigenschaften in ihre exakten Literal-Typen umgewandelt werden:

TS
const colors = ['red', 'green', 'blue'] as const;
// colors[0] = "yellow"; // Errore: l'array è di sola lettura (readonly)

Template-Literal-Typen (Template Literal Types)

Template-Literal-Typen basieren auf JavaScript-Template-Strings, werden aber zur Definition von Typen verwendet. Sie ermöglichen es, mehrere Literal-Typen zu einem einzigen zu kombinieren:

TS
type Size = 'small' | 'large';
type Color = 'red' | 'blue';

// Crea l'unione: "small-red" | "small-blue" | "large-red" | "large-blue"
type ItemId = `${Size}-${Color}`;

String-Hilfsklassen in Template-Literal-Typen

TypeScript bietet spezielle Hilfstypen zur Manipulation von Zeichen innerhalb von Template-Literal-Typen:

  • Capitalize<StringType>: Schreibt den ersten Buchstaben der Zeichenfolge groß.
  • Uncapitalize<StringType>: Schreibt den ersten Buchstaben der Zeichenfolge klein.
  • Uppercase<StringType>: Wandelt die gesamte Zeichenfolge in Großbuchstaben um.
  • Lowercase<StringType>: Wandelt die gesamte Zeichenfolge in Kleinbuchstaben um.
TS
type ActionType = 'click' | 'hover';

// Genera: "onClick" | "onHover"
type EventHandlers = `on${Capitalize<ActionType>}`;

Probier es aus

Esercizio 1: Union von Literal-Typen Direction

Übung#ts.m5.l2.e1
Versuche: 0Wird geladen…

Definiere einen Literal-Typ namens Direction, der nur die Strings 'up', 'down', 'left' oder 'right' akzeptiert. Deklariere dann eine Funktion namens move(dir: Direction): string, die den String 'Moving ' gefolgt von der empfangenen Richtung zurückgibt.

Editor wird geladen…
Hinweis anzeigen

Definiere zuerst das Typ-Alias mit den vier durch | getrennten Optionen und deklariere dann die Funktion move, indem du Parameter und Rückgabewert annotierst.

Lösung nach 3 Versuchen verfügbar

Esercizio 2: Assertion auf JSON.parse

Übung#ts.m5.l2.e2
Versuche: 0Wird geladen…

Die Funktion JSON.parse gibt standardmäßig den Typ any zurück. Ändere die Funktion parseUser so, dass das Ergebnis von JSON.parse(json) unter Verwendung des Schlüsselworts as als Typ { username: string } deklariert (asserted) wird.

Editor wird geladen…
Hinweis anzeigen

Füge 'as { username: string }' direkt nach dem Aufruf von JSON.parse(json) hinzu.

Lösung nach 3 Versuchen verfügbar

Esercizio 3: Template-Literal für Events

Übung#ts.m5.l2.e3
Versuche: 0Wird geladen…

Definiere gegeben den Typen Status und Action einen Template-Literal-Typ namens Event im Format 'Status-Action' (z. B. 'open-click').

Editor wird geladen…
Hinweis anzeigen

Verwende Backticks zur Definition des Typs und die Syntax ${Status}-${Action} darin.

Lösung nach 3 Versuchen verfügbar

Esercizio 4: Template-Literal-Typ mit Capitalize

Übung#ts.m5.l2.e4
Versuche: 0Wird geladen…

Definiere einen Literal-Typ Event, der 'click' oder 'hover' sein kann. Deklariere danach unter Verwendung von Template-Literal-Typen einen Typ EventHandler, der Zeichenfolgen im Format on gefolgt vom Eventnamen mit großgeschriebenem Anfangsbuchstaben (d. h. 'onClick' oder 'onHover') darstellt.

Editor wird geladen…
Hinweis anzeigen

Verwende Capitalize<Event> innerhalb des Template-Literals, um den ersten Buchstaben des Events großzuschreiben.

Lösung nach 3 Versuchen verfügbar