Un objet qui n'a jamais entendu parler du type. Et qui passe.An object that never heard of the type. And it passes.
Sept lignes que tout le monde écrit le premier jour. Elles compilent — et le fait qu'elles compilent, ici, n'est pas une tolérance : c'est tout le modèle de TypeScript qui tient dans un seul appel. La compatibilité se décide sur la forme, pas sur le nom.Seven lines everyone writes on day one. They compile — and that they compile, here, is no leniency: it's all of TypeScript's model fitting inside a single call. Compatibility is decided by shape, not by name.
interface Point { x: number; y: number } function dist(p: Point) { return Math.hypot(p.x, p.y); } const here = { x: 3, y: 4, label: "home" }; dist(here); // ✓ accepté — here n'a jamais entendu parler de Point
here n'« implémente » pas Point. Il a la forme de Point — x et y en number — et ça suffit. Le label en trop ne gêne personne.here doesn't "implement" Point. It has the shape of Point — x and y as number — and that's enough. The extra label bothers no one.
« Qu'est-ce qui rend deux types compatibles — leur nom, ou leur forme ? » En TypeScript, la réponse est toujours : la forme. Un type, ce n'est pas une étiquette qu'on colle ; c'est un contrat de structure que toute valeur ayant les bons membres remplit, sans rien déclarer."What makes two types compatible — their name, or their shape?" In TypeScript, the answer is always: the shape. A type isn't a label you stick on; it's a structural contract that any value with the right members fulfills, declaring nothing.
Tout le reste de TypeScript — unions, génériques, narrowing — se lit à travers cette lentille. On ne commence pas par la syntaxe des interfaces : on commence par un objet qui passe sans avoir rien promis. Comprends le structurel, et l'assignabilité cesse d'être une loterie.Everything else in TypeScript — unions, generics, narrowing — reads through this lens. We don't start with interface syntax: we start with an object that passes without promising anything. Understand structural typing, and assignability stops being a lottery.