Un type dérivé, réécrit à la main, diverge de sa source. Calculé, jamais.A derived type, hand-rewritten, drifts from its source. Computed, never.
On a souvent besoin d'une variante d'un type : la même forme, mais tous les champs optionnels, ou en lecture seule, ou un sous-ensemble. Le réflexe est de la réécrire à la main — et de créer une seconde description que rien n'oblige à suivre la première. Le jour où la source gagne un champ, la copie l'ignore. TypeScript offre l'autre voie : calculer ce type à partir de l'original, pour qu'ils ne divergent jamais. C'est tout le volume — le langage dans le langage.You often need a variant of a type: the same shape, but all fields optional, or read-only, or a subset. The reflex is to rewrite it by hand — and to create a second description nothing forces to track the first. The day the source gains a field, the copy ignores it. TypeScript offers the other path: compute that type from the original, so they never diverge. That's the whole volume — the language within the language.
type User = { id: string; name: string; email: string }; // réécrit à la main — deux descriptions de la même chose à maintenir : type UserUpdate = { id?: string; name?: string; email?: string }; // Ajoute 'role' à User → UserUpdate l'ignore en silence. Les deux divergent.
Deux descriptions de la même forme finissent toujours par diverger. Calculer la variante depuis la source supprime la seconde description : il n'y a plus qu'une vérité, et la variante en découle.Two descriptions of the same shape always end up diverging. Computing the variant from the source removes the second description: there's only one truth left, and the variant follows from it.
type User = { id: string; name: string; email: string }; type UserUpdate = Partial<User>; // CALCULÉ depuis User — ne dérive jamais // Ajoute 'role' à User → UserUpdate gagne 'role?' automatiquement.
« Ce type, je le calcule à partir d'un autre, ou je le réécris (et je le désynchronise) à la main ? » Dès qu'une forme est une transformation d'une autre, dérive-la — un mapped type garde les deux liées pour toujours."This type — do I compute it from another, or rewrite it (and desync it) by hand?" The moment a shape is a transformation of another, derive it — a mapped type keeps the two linked forever.
Jusqu'ici, les types décrivaient et reliaient des valeurs. Le Vol 6 franchit un seuil : transformer un type pour en produire un autre. Le mapped type en est le premier verbe — parcourir les clés d'une forme et les réécrire. Tout le reste du volume (conditionnels, template literals) prolonge cette idée, avec sa puissance et son prix.Until now, types described and related values. Vol 6 crosses a threshold: transforming a type to produce another. The mapped type is its first verb — walk a shape's keys and rewrite them. The rest of the volume (conditionals, template literals) extends this idea, with its power and its price.