Se rendre au contenu

TypeScript 4.1 est sorti

19 novembre 2020 par
TypeScript 4.1 est sorti
Makersquad

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.


React 17 est sorti
Pas de nouvelles features, et c'est le but