Microsoft nous gratifie d’une belle mise à jour avec TypeScript 4.1, sortie le 19 novembre 2020.
Au menu : des template literal types qui vont vous simplifier la vie, du key remapping élégant, et des types conditionnels récursifs pour les plus aventureux.
Documentation officielle : Annonce TypeScript 4.1
Les nouveautés à retenir
Template literal types : la magie des strings typées
Vous connaissiez les template strings en JavaScript ? Bienvenue dans leur version typée, tout aussi puissante :
type World = "world";
type Greeting = `hello ${World}`; // "hello world"
// Combinaisons
type Color = "red" | "blue";
type Size = "small" | "large";
type Shirt = `${Size}-${Color}`;
// "small-red" | "small-blue" | "large-red" | "large-blue"
// Utilitaires
type Uppercase<S extends string> = ...
type Lowercase<S extends string> = ...
type Capitalize<S extends string> = ...
Key remapping : transformer les clés à la volée
Besoin de générer automatiquement des getters ? C’est désormais un jeu d’enfant :
type Getters<T> = {
[K in keyof T as `get${Capitalize<string & K>}`]: () => T[K]
};
interface Person {
name: string;
age: number;
}
type PersonGetters = Getters<Person>;
// { getName: () => string; getAge: () => number; }
Encore mieux : on peut filtrer les clés qu’on ne veut pas :
type RemoveKind<T> = {
[K in keyof T as Exclude<K, "kind">]: T[K]
};
Types conditionnels récursifs : pour aller plus loin
Grande nouvelle : les types peuvent maintenant se référencer eux-mêmes. Pratique pour “déballer” les Promises imbriquées :
type Awaited<T> = T extends Promise<infer U> ? Awaited<U> : T; type Result = Awaited<Promise<Promise<string>>>; // string
paths sans baseUrl : enfin !
Fini l’obligation de définir baseUrl pour utiliser les paths. Un petit gain de configuration qui fait plaisir :
{
"compilerOptions": {
"paths": {
"@/*": ["./src/*"]
}
}
}
Et aussi dans cette version
Quelques améliorations qui méritent le détour :
- checkJs implique automatiquement allowJs (une dépendance de moins à gérer)
- Support complet du nouveau JSX transform de React 17
- Nouvelles options de résolution node12 et nodenext pour coller aux modules ES
- Inférence améliorée pour Promise.all (oui, ça fonctionnait déjà bien, mais là c’est encore mieux)
Échanger avec un expert TypeScript
Nous revenons vers vous sous 24h.
Chez Makersquad, nous accompagnons nos clients dans le développement d’applications robustes et maintenables grâce à TypeScript. Que ce soit pour structurer un nouveau projet, migrer un codebase existant ou améliorer la qualité et la sécurité de votre application, notre équipe met son expertise TypeScript à votre service.