Direct naar de hoofdinhoud
Module 5 · Les 2 van 210/14 in de cursus~15 min
Modulelessen (2/2)

Letterlijke typen en beweringen

TypeScript biedt geavanceerde tools om de mogelijke waarden van variabelen te beperken en om de compiler te dwingen specifiekere typen te herkennen wanneer dat nodig is.

Letterlijke typen

Een letterlijk type vertegenwoordigt een exacte, enkele waarde (bijvoorbeeld een specifieke tekenreeks of getal). Ze worden meestal gecombineerd met vakbondstypen:

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

light = 'red'; // OK
light = 'blue'; // Error: "blue" is not assignable to TrafficLight

Typeverklaringen (as)

Soms hebt u informatie over een type dat TypeScript tijdens het compileren niet kan weten. In deze gevallen kunt u een typeverklaring gebruiken met het trefwoord as:

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

De bewering vertelt de compiler: "Geloof me, ik weet dat dit element een HTMLCanvasElement is". Er worden tijdens runtime geen controles of casts uitgevoerd; het helpt alleen de typecontrole.

Const-beweringen (as const)

Wanneer we een object of een array declareren met const, staat TypeScript nog steeds toe dat de interne eigenschappen ervan worden gewijzigd. Door aan het einde as const toe te voegen, wordt de hele structuur bevroren en alleen-lezen gemaakt, waarbij alle eigenschappen worden omgezet in hun exacte letterlijke typen:

TS
const colors = ['red', 'green', 'blue'] as const;
// colors[0] = "yellow"; // Error: array is read-only

Letterlijke typen van sjablonen

Letterlijke sjabloontypen worden bovenop JavaScript-sjabloontekenreeksen gebouwd, maar worden gebruikt in typeposities. Ze maken het mogelijk om meerdere letterlijke typen in één te combineren:

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

// Creates the union: "small-red" | "small-blue" | "large-red" | "large-blue"
type ItemId = `${Size}-${Color}`;

Tekenreekshulpprogramma's in letterlijke sjabloontypen

TypeScript biedt speciale typen hulpprogramma's om tekens binnen letterlijke sjabloontypen te manipuleren:

  • Capitalize<StringType>: geeft de eerste letter van de tekenreeks een hoofdletter.
  • Uncapitalize<StringType>: Maakt de hoofdletter van de eerste letter van de string ongedaan.
  • Uppercase<StringType>: Converteert de gehele tekenreeks naar hoofdletters.
  • Lowercase<StringType>: Converteert de gehele tekenreeks naar kleine letters.
TS
type ActionType = 'click' | 'hover';

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

Probeer het zelf

Oefening 1: Richting Letterlijke Unie

Oefening#ts.m5.l2.e1
Pogingen: 0Laden…

Definieer een letterlijk type met de naam Direction dat alleen de tekenreeksen 'omhoog', 'omlaag', 'links' of 'rechts' accepteert. Declareer vervolgens een functie met de naam move(dir: Direction): string die de string 'Moving' retourneert, gevolgd door de ontvangen richting.

Editor laden…
Toon hint

Definieer eerst de typealias met de vier opties gescheiden door |, en declareer vervolgens de move-functie die de parameter en het retourtype annoteert.

Oplossing beschikbaar na 3 pogingen

Oefening 2: Bewering op JSON.parse

Oefening#ts.m5.l2.e2
Pogingen: 0Laden…

De functie JSON.parse retourneert standaard elk type. Wijzig de functie parseUser zodat het resultaat van JSON.parse(json) wordt beweerd als type { gebruikersnaam: string } met behulp van het trefwoord as.

Editor laden…
Toon hint

Voeg 'as { gebruikersnaam: string }' toe onmiddellijk na de JSON.parse(json)-aanroep.

Oplossing beschikbaar na 3 pogingen

Oefening 3: Letterlijke sjabloon voor evenementen

Oefening#ts.m5.l2.e3
Pogingen: 0Laden…

Gegeven de status- en actietypen, definieert u een sjabloontekenreekstype met de naam Gebeurtenis in de notatie 'Status-Actie' (bijvoorbeeld 'open-klik').

Editor laden…
Toon hint

Gebruik backticks om het type en de syntaxis ${Status}-${Action} daarin te definiëren.

Oplossing beschikbaar na 3 pogingen

Oefening 4: Sjabloonlettertype met hoofdletter

Oefening#ts.m5.l2.e4
Pogingen: 0Laden…

Definieer een letterlijk type Gebeurtenis dat 'klik' of 'zweven' kan zijn. Gebruik vervolgens Template Literal Types om een ​​type EventHandler te declareren dat tekenreeksen vertegenwoordigt in de indeling on, gevolgd door de gebeurtenisnaam met hoofdletters (d.w.z. 'onClick' of 'onHover').

Editor laden…
Toon hint

Gebruik Capitalize<Event> letterlijk in de sjabloon om de eerste letter van de gebeurtenis met een hoofdletter te schrijven.

Oplossing beschikbaar na 3 pogingen