كلاهما يمكنه الاحتفاظ بـ أي قيمة، لكنهما يختلفان في الأمان. any يوقف فحص النوع؛ unknown يبقيه قيد التشغيل ويجبرك على التضييق قبل الاستخدام.
ts
: = ;
a..;
();
: = ;
u.();
();
function handle(input: unknown) {
if (typeof input === "string") {
input.toUpperCase(); // ✅ inside the guard, TS knows it's a string
}
}
unknown هو النظير الآمن من حيث النوع لـ any: يمكنك تعيين أي شيء إلى unknown، لكن لا يمكنك فعل أي شيء معه حتى تثبت ما هو عبر type guard.
unknown — للقيم ذات النوع غير المعروف حقًا عند الحدود: نتائج JSON.parse استجابات API، catch (e: unknown). يفرض التحقق.any — منفذ هروب عند ترحيل JS أو عندما لا يمكنك حقًا كتابة شيء ما. استخدمه بحذر؛ فهو ينتشر بصمت ويوقف الأمان.الالتجاء إلى any يهزم الغرض من TypeScript.
فضّل unknown عند حدود غير مكتوبة — فهو يحافظ على ضمانات المترجم مع قبول المدخلات التعسفية، ما يدفعك للتحقق من البيانات قبل الوثوق بها.