Une valeur, plusieurs formes possibles. Une seule à la fois.One value, several possible shapes. Exactly one at a time.
Le typage structurel décrit une forme. Mais le monde réel est fait d'alternatives : une réponse réussie ou en erreur, un identifiant texte ou numérique. L'union A | B note ça directement — « l'une de ces formes, exclusivement » — et c'est la brique de presque toute modélisation honnête.Structural typing describes one shape. But the real world is made of alternatives: a response that succeeded or failed, an id that's text or numeric. The union A | B writes that directly — 'one of these shapes, exclusively' — and it's the brick of almost any honest model.
type Ok = { status: "ok"; data: string }; type Err = { status: "error"; message: string }; type Result = Ok | Err; // l'une OU l'autre — jamais entre les deux function code(r: Result) { return r.status; // ✓ status existe dans les DEUX formes → toujours lisible }
Un Result n'est jamais « un peu des deux ». À l'exécution, c'est soit un Ok, soit un Err — et status, présent dans les deux, reste toujours lisible.A Result is never "a bit of both". At runtime it's either an Ok or an Err — and status, present in both, stays always readable.
« Cette donnée, c'est l'une OU l'autre forme (union), ou les deux à la fois (intersection) ? » Avant d'écrire un champ optionnel ou une classe de base, demande-toi laquelle des deux compositions décrit vraiment la réalité."Is this data one OR the other shape (union), or both at once (intersection)?" Before reaching for an optional field or a base class, ask which of the two compositions actually describes reality.
Le numéro précédent a posé qu'un type est une forme. Celui-ci montre comment assembler ces formes — l'union pour les alternatives, l'intersection pour les cumuls. Tout le reste de TypeScript, du narrowing aux génériques, manipule ces deux opérateurs.The previous issue established that a type is a shape. This one shows how to assemble those shapes — union for alternatives, intersection for combinations. The rest of TypeScript, from narrowing to generics, manipulates these two operators.