L'annotation a promis une forme. À l'exécution, il n'y a personne.The annotation promised a shape. At runtime, there's no one there.
Quatre lignes qui compilent, et plantent. Le réflexe, après le Vol 1, est de croire qu'un : User garantit un User. Il ne garantit rien à l'exécution — parce qu'à l'exécution, il n'existe plus. Les types prouvent à la compilation, puis s'effacent. C'est la faille fondamentale, et le cœur de la série.Four lines that compile, and crash. The reflex, after Vol 1, is to believe a : User guarantees a User. It guarantees nothing at runtime — because at runtime, it no longer exists. Types prove at compile time, then erase. That's the fundamental gap, and the heart of the series.
type User = { name: string; age: number }; const u: User = JSON.parse('null'); // ✓ compile sans une plainte console.log(u.name); // 💥 Cannot read properties of null // L'annotation : User a promis une forme. // JSON.parse a rendu any. Personne n'a vérifié. À l'exécution, u vaut null.
Tout ce qui est type s'évapore à la frontière. Il ne reste que la valeur JavaScript nue — ici, un null que rien n'a arrêté.Everything that is a type evaporates at the boundary. Only the bare JavaScript value remains — here, a null nothing stopped.
« Ce que j'écris prouve-t-il quoi que ce soit à l'exécution — ou s'évapore-t-il à la compilation ? » Une annotation est une preuve pour le compilateur, valable jusqu'à la frontière. Après, il n'y a que des valeurs."Does what I write prove anything at runtime — or does it evaporate at compile time?" An annotation is a proof for the compiler, valid up to the boundary. After that, there are only values.
C'est l'équivalent de la possession en Rust : la règle qui, une fois comprise, explique cent comportements. Pourquoi instanceof marche et pas : Type, pourquoi il faut un discriminant, pourquoi on valide à la frontière — tout découle de l'effacement. On ne commence pas par typeof : on commence par une valeur qui a menti.It's the equivalent of ownership in Rust: the rule that, once understood, explains a hundred behaviors. Why instanceof works and : Type doesn't, why you need a discriminant, why you validate at the boundary — all of it follows from erasure. We don't start with typeof: we start with a value that lied.