Même aveu qu'any — « je ne connais pas ce type » — mais unknown refuse qu'on s'en serve.Same admission as any — "I don't know this type" — but unknown refuses to let you use it.
Le numéro précédent a montré le trou. Voici son jumeau honnête. unknown dit exactement la même chose qu'any : « le type de cette valeur m'échappe ». Mais là où any te laisse agir à l'aveugle — et le bug revient au runtime — unknown ferme la porte : tant que tu n'as pas prouvé ce que tu tiens, tu ne peux rien en faire. Le cas canonique, c'est le catch : une exception peut être n'importe quoi, et seul unknown t'oblige à le reconnaître.The previous issue showed the hole. Here's its honest twin. unknown says exactly what any says: 'I don't know this value's type'. But where any lets you act blindly — and the bug returns at runtime — unknown shuts the door: until you've proven what you hold, you can do nothing with it. The canonical case is catch: an exception can be anything, and only unknown forces you to admit it.
try { risky(); } catch (e: any) { // any : on fait ce qu'on veut de e console.log(e.message.toUpperCase()); // ^ et si le code a fait 'throw "panne"' ou 'throw 42' ? } // 💥 e.message est undefined — crash dans le catch
Les deux avouent ne pas connaître le type. any en conclut « alors fais ce que tu veux » ; unknown, « alors tu ne fais rien avant de l'avoir prouvé ». La même ignorance, retournée en garde.Both admit they don't know the type. any concludes "then do whatever"; unknown, "then you do nothing until you've proven it". The same ignorance, turned into a guard.
try { risky(); } catch (e: unknown) { // unknown : on ne peut RIEN faire sans prouver if (e instanceof Error) { console.log(e.message.toUpperCase()); // ✓ ici e : Error — prouvé } else { console.log("erreur non-Error :", e); // l'autre cas, géré honnêtement } }
« Je ne connais pas ce type — est-ce que je l'assume (unknown, et je prouve) ou est-ce que je le cache (any, et je prie) ? » Dès qu'une valeur arrive sans garantie, unknown est le défaut honnête : il transforme l'ignorance en obligation de preuve."I don't know this type — do I own it (unknown, and I prove) or hide it (any, and I pray)?" The moment a value arrives without a guarantee, unknown is the honest default: it turns ignorance into an obligation to prove.
any et unknown partent du même constat — type inconnu — et divergent sur la conséquence. C'est pourquoi unknown ne « remplace » pas any par magie : il rend visible le travail qu'any escamotait. Tout le numéro tient dans ce déplacement : de « débrancher la vérification » à « différer l'usage jusqu'à la preuve ».any and unknown start from the same finding — unknown type — and diverge on the consequence. That's why unknown doesn't magically 'replace' any: it makes visible the work any concealed. The whole issue lives in that shift: from 'unplug the check' to 'defer use until proof'.