التخلّص من any وتفضيل unknown مع التضييق
استبدل any بـ unknown مع التضييق، وأضف حواجز صغيرة ودوال تأكيد، وفعّل أعلام الصرامة تدريجيًا دون كسر عملية البناء.
التخلّص من any وتفضيل unknown مع التضييق درس مجاني في TypeScript Academy على CoddyKit. هذا هو الدرس 1 من أصل 2. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في TypeScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة TypeScript Academy 2 دروس في المجموع.
مقدمة
الهدف: أزل مواضع استخدام any الحرجة. فضّل unknown للقيم غير الموثوقة، وضيّق النوع باستخدام فحوص بسيطة. ستضيف حواجز تحقق صغيرة وتفعّل أعلام الصرامة خطوةً بعد خطوة.
- any → unknown
- تضييق النوع باستخدام typeof/in/instanceof
- دوال التأكيد
مشكلات any
يعطّل any وسائل الأمان: فقد تمرّ البنى غير الصحيحة أو العمليات الحسابية على السلاسل النصية من مرحلة الترجمة، ثم تفشل لاحقًا.
// any hides bugs
function avgBad(values: any): number {
// Compiles even if values is not an array of numbers
return values.reduce((a: number, b: number) => a + b, 0) / values.length
}
// Runtime crash examples:
// avgBad(123)
// avgBad(["1","2"]) // string addition!unknown وتضييق النوع
استخدم unknown للمدخلات القادمة من خارج النظام. ضيّق النوع باستخدام Array.isArray وtypeof، ثم أجرِ العمليات الحسابية بأمان.
// unknown forces checks
function avg(values: unknown): number {
if (!Array.isArray(values)) throw new Error("values must be an array")
const nums = values.filter((v): v is number => typeof v === "number")
if (nums.length === 0) throw new Error("no numbers")
const sum = nums.reduce((a, b) => a + b, 0)
return sum / nums.length
}
// avg([1,2,3]) → 2; avg("oops") throws early with a clear messageحواجز الأنواع
أنشئ predicate من الشكل x is T لتضييق النوع لدى المستدعين بوضوح. اجعل حواجز التحقق صغيرة ومركزة على الفحوص البنيوية.
// Small predicate to reuse narrowing
export type User = { id: string; name: string }
export function isUser(x: unknown): x is User {
return typeof x === "object" && x !== null
&& typeof (x as any).id === "string"
&& typeof (x as any).name === "string"
}
export function hello(x: unknown) {
if (!isUser(x)) throw new Error("invalid user")
return `Hello, ${x.name}`
}دوال التأكيد
تضيّق دوال التأكيد (asserts x is T) النوع بعد تنفيذها. استخدمها للشروط المسبقة المطلوبة، واطرح استثناءً برسائل واضحة.
// Assertion function throws or narrows
function assertUser(x: unknown): asserts x is { id: string; name: string } {
if (typeof x !== "object" || x === null) throw new Error("not an object")
const o = x as Record<string, unknown>
if (typeof o.id !== "string" || typeof o.name !== "string") throw new Error("bad user")
}
export function greetUnsafe(x: unknown) {
assertUser(x) // now x is narrowed after this call
return `Hi ${x.name}`
}خطة الصرامة
الخطة:
- فعّل
noImplicitAnyوأصلح الأخطاء الجديدة أولًا. - أضف حواجز تحقق للمدخلات الخارجية.
- فعّل
strictNullChecksوتعامل مع undefined صراحةً. - تتبّع ما تبقى من
anyباستخدام ESLint وقلّله مع مرور الوقت.
التحقق من unknown مقابل any
تحقق سريع: لماذا نفضّل unknown على any للبيانات غير الموثوقة؟
خلاصة
خلاصة: استبدل any بـ unknown، وأضف حواجز تحقق أو دوال تأكيد صغيرة، وارفع أعلام الصرامة تدريجيًا للحفاظ على نجاح عمليات البناء.
تعلم TypeScript مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 101
- الدروس
- 352
الأسئلة الشائعة
هل درس «التخلّص من any وتفضيل unknown مع التضييق» مجاني؟
نعم — نص درس «التخلّص من any وتفضيل unknown مع التضييق» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة TypeScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة TypeScript Academy 2 دروس في المجموع.
ماذا ستتعلم في «التخلّص من any وتفضيل unknown مع التضييق»؟
استبدل any بـ unknown مع التضييق، وأضف حواجز صغيرة ودوال تأكيد، وفعّل أعلام الصرامة تدريجيًا دون كسر عملية البناء. تتمرن على TypeScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ TypeScript Academy؟
لا تُشترط خبرة سابقة. TypeScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 2.
كم من الوقت يستغرق درس «التخلّص من any وتفضيل unknown مع التضييق»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس TypeScript Academy هذا؟
نعم. كل درس في TypeScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- التخلّص من any وتفضيل unknown مع التضييق
- تطبيق العلامات الصارمة تدريجيًا