Over TypeScript 5.0
Wat is TypeScript?
Met elke nieuwe versie voegt TypeScript nieuwe functies toe en stroomlijnt het bestaande workflows. TypeScript 5.0 is hierin geen uitzondering: het biedt een reeks tools en verbeteringen die je productiviteit kunnen verhogen en de betrouwbaarheid van je codebase verbeteren.
Gemoderniseerde decorators
Decorators bieden een krachtige manier om gedrag aan klassen of specifieke class members toe te voegen of aan te passen. Ze worden vaak gebruikt in frameworks zoals Angular en NestJS, maar de nieuwe implementatie maakt ze breder toepasbaar.
Voorbeeld: Een decorator gebruiken
//typescript function logExecution(target: any, propertyKey: string, descriptor: PropertyDescriptor) { const originalMethod = descriptor.value; descriptor.value = function (...args: any[]) { console.log(`Methode ${propertyKey} wordt uitgevoerd.`); return originalMethod.apply(this, args); }; } class Persoon { naam: string; leeftijd: number; constructor(naam: string, leeftijd: number) { this.naam = naam; this.leeftijd = leeftijd; } @logExecution begroet() { console.log(`Hallo, mijn naam is ${this.naam}.`); } } const p = new Persoon('Jan', 25); p.begroet();
In dit voorbeeld wordt de logExecution-decorator gebruikt om een logbericht weer te geven telkens wanneer de methode begroet wordt aangeroepen. In eerdere versies moest je extra instellingen aanpassen om decorators te gebruiken. TypeScript 5.0 maakt dit eenvoudiger.
Const type parameters
Met const kun je aangeven dat een generiek type exact overeen moet komen met een opgegeven waarde of set waarden. Dit verhoogt de typeveiligheid en voorkomt onverwacht gedrag.
Voorbeeld: exacte typen behouden
//typescript function krijgExacteNamen<const T extends readonly string[]>(namen: T): T { return namen; } const landen = krijgExacteNamen(['Nederland', 'België', 'Duitsland']); // Type van 'landen' is nu readonly ['Nederland', 'België', 'Duitsland']
Hier zorgt de const-modifier ervoor dat het type van landen exact overeenkomt met de opgegeven waarden, in plaats van te worden gedegradeerd tot een generieke array van strings (string[]). Dit maakt het gemakkelijker om fouten te vermijden in scenario's waarin exacte waarden belangrijk zijn.
Verbeteringen aan enums
Voorbeeld: betere typeveiligheid met enums
//typescript enum Kleur { Rood, Groen, Blauw, } function isPrimaireKleur(kleur: Kleur): boolean { return kleur === Kleur.Rood || kleur === Kleur.Groen || kleur === Kleur.Blauw; } console.log(isPrimaireKleur(Kleur.Rood)); // true console.log(isPrimaireKleur(3)); // Fout in TypeScript 5.0
Voorheen kon het doorgeven van een waarde zoals 3 (die niet gedefinieerd is in de Kleur-enum) onverwachte resultaten opleveren. In TypeScript 5.0 wordt dit nu als een fout gemarkeerd, wat leidt tot robuustere en betrouwbaardere code.
Prestatieverbeteringen
Wat betekent dit voor ontwikkelaars?
Snellere compilatie: Vooral merkbaar in grote projecten met veel modules.
Betere compatibiliteit: Door de migratie van namespaces naar ES-modules is het eenvoudiger om moderne tools en workflows te gebruiken.
Bundler resolutie
Verbeterde JSX ondersteuning
Vergelijking met TypeScript 4.9
- Decorators: In 4.9 waren ze experimenteel en niet gestandaardiseerd; in 5.0 zijn ze volledig ondersteund volgens ECMAScript-specificaties. Dit maakt ze betrouwbaarder en breder toepasbaar.
- Const Type Parameters: Deze nieuwe functie, niet beschikbaar in 4.9, zorgt voor exacte typen en meer controle over generieke functies. Het verhoogt de typeveiligheid in complexe codebases.
- Enums: Waar enums in 4.9 nog vatbaar waren voor ongeldige waarden, biedt 5.0 veilige union enums. Dit voorkomt fouten en verbetert de betrouwbaarheid van je code.
- Prestatieverbeteringen: 4.9 had grotere pakketten en langzamere compilatietijden; 5.0 biedt kleinere pakketten en snellere builds. Dit maakt het vooral geschikt voor grotere projecten.
- JSX ondersteuning: JSX was al bruikbaar in 4.9, maar in 5.0 zijn props nauwkeuriger getypeerd. Dit helpt ontwikkelaars om foutloze componenten te bouwen.