as n'est pas une conversion. C'est une signature : « tais-toi, je sais mieux. »as isn't a conversion. It's a signature: "be quiet, I know better."
Venant de Java ou C#, on lit as comme un cast : une opération qui vérifie ou convertit à l'exécution. En TypeScript, rien de tel. as ne touche pas la valeur et n'exécute aucun code — il change seulement ce que le compilateur croit. C'est un contrat qu'on signe à sa place : « cette valeur est un User, je m'en porte garant ». Si on a tort, le compilateur s'est tu pour rien, et le bug revient intact au runtime.Coming from Java or C#, you read as as a cast: an operation that checks or converts at runtime. In TypeScript, nothing of the sort. as doesn't touch the value and runs no code — it only changes what the compiler believes. It's a contract you sign in its place: 'this value is a User, I vouch for it'. If you're wrong, the compiler went quiet for nothing, and the bug returns intact at runtime.
const user = JSON.parse(raw) as User; // ✗ ressemble à une conversion — n'en est pas user.name.trim(); // le compilateur est muet… // 💥 si le JSON n'a pas de .name : crash. 'as' n'a RIEN vérifié, RIEN converti.
Le cast d'un langage nominal fait quelque chose à l'exécution. Le as de TypeScript ne fait rien d'autre que faire taire le compilateur — et l'erreur, si erreur il y a, ressurgit là où on ne regarde plus.A nominal language's cast does something at runtime. TypeScript's as does nothing but silence the compiler — and the error, if any, resurfaces where you're no longer looking.
// Le DOM renvoie le type large HTMLElement | null. MOI, je sais que c'est un input : const input = document.getElementById("email") as HTMLInputElement; input.value; // ✓ justifiable — je l'ai écrit dans le HTML, le compilateur ne le voit pas // L'invariant que j'affirme, je peux l'énoncer. C'est ça, un 'as' légitime. // (Il efface aussi le '| null' : si l'id quitte le HTML, c'est un crash — à assumer.)
« Ce as est-il une preuve que le compilateur ne peut pas faire seul — et que je peux, moi, justifier — ou l'aveu que je n'ai pas compris l'erreur ? » Si tu peux énoncer l'invariant en une phrase vraie, c'est une assertion. Sinon, c'est un vœu."Is this as a proof the compiler can't make on its own — one I can justify — or an admission I didn't understand the error?" If you can state the invariant in one true sentence, it's an assertion. Otherwise, it's a wish.
Trois échappatoires, trois rapports à la vérification. any la débranche en silence. unknown l'exige avant tout usage. as la court-circuite par une signature : ni off, ni preuve, mais ta parole donnée au compilateur. C'est le dernier recours du volume — et celui sur lequel reposait déjà, sans le dire, le brand du Vol 3.Three escape hatches, three relationships to checking. any unplugs it silently. unknown demands it before any use. as short-circuits it with a signature: neither off nor proof, but your word given to the compiler. It's the volume's last resort — and the one Vol 3's brand already silently rested on.