آليات توسيع الأنواع وتضييقها
تعلّموا كيفية توسيع TypeScript للأنواع ومتى ينبغي منع ذلك
آليات توسيع الأنواع وتضييقها درس مجاني في TypeScript Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في TypeScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة TypeScript Academy 4 دروس في المجموع.
ما توسيع النوع؟
يحدث توسيع النوع عندما يستنتج TypeScript نوعًا أوسع من النوع الذي كتبته. يؤدي إسناد let x = "hello" إلى توسيعه إلى string، وليس إلى الحرفي "hello".
let x = "hello"; // inferred: string, not "hello"
let y = 42; // inferred: number, not 42التوسيع مع let مقابل const
تحتفظ المتغيرات المعلنة باستخدام const بنوعها الحرفي لأنها لا يمكن إعادة إسنادها. أما let فيُوسَّع إلى النوع الأساسي.
const a = "world"; // type: "world"
let b = "world"; // type: stringمنع التوسيع باستخدام التعليقات التوضيحية للأنواع
يمنع تحديد نوع متغير let صراحةً توسيعه، ويثبّت النوع الحرفي.
let direction: "left" | "right" = "left";
// direction = "up"; // Error: not assignableالتضييق باستخدام typeof
يضيّق TypeScript نوع الاتحاد داخل عمليات التحقق باستخدام typeof، ما يمنحك نوعًا دقيقًا داخل ذلك الفرع.
function format(val: string | number) {
if (typeof val === "string") {
return val.toUpperCase(); // val: string here
}
return val.toFixed(2); // val: number here
}التضييق باستخدام عمليات التحقق من المساواة
تضيّق عمليات التحقق من المساواة مع القيم الحرفية النوع أيضًا داخل الفرع.
type Direction = "left" | "right" | "up";
function handle(dir: Direction) {
if (dir === "left") {
console.log("Going left"); // dir: "left"
}
}تحليل تدفق التحكم
يتتبع TypeScript عمليات الإسناد عبر تدفق التحكم، ويضيّق النوع بعد كل فرع.
function process(x: string | null) {
if (x === null) return;
// x is string here — TypeScript knows null is ruled out
console.log(x.length);
}التوسيع في القيم الحرفية للكائنات
تتوسع قيم خصائص القيم الحرفية للكائنات أيضًا، ما لم تستخدم as const.
const config = { mode: "dark" };
// config.mode: string (widened)
const config2 = { mode: "dark" } as const;
// config2.mode: "dark" (literal)الحداثة والتوسيع
عندما تسند قيمة حرفية لكائن مباشرةً إلى متغير محدد النوع، يطبّق TypeScript فحص الخصائص الزائدة — لكن بعد توسيعها إلى متغير مُسمّى، لا يعود ذلك الفحص مطبقًا.
interface Options { timeout: number; }
const opts = { timeout: 3000, retry: true };
// No error — widened type, excess property check skipped
const o: Options = opts;التضييق باستخدام معامل in
يضيّق معامل in أنواع اتحادات الكائنات من خلال التحقق من وجود خاصية.
type Cat = { meow(): void };
type Dog = { bark(): void };
function speak(animal: Cat | Dog) {
if ("meow" in animal) animal.meow();
else animal.bark();
}التضييق باستخدام دوال التأكيد
تستخدم دوال التأكيد أنواع القيم المُعادة asserts condition للتضييق بعد استدعائها.
function assertString(val: unknown): asserts val is string {
if (typeof val !== "string") throw new Error("Expected string");
}
const x: unknown = "hi";
assertString(x);
x.toUpperCase(); // OK — narrowed to stringمراجعة: التوسيع مقابل التضييق
يوسّع التوسيع الأنواع المستنتجة لمنحها مرونة أكبر، بينما يحسّن التضييق نوعًا واسعًا إلى نوع دقيق داخل فرع شرطي. ويساعدك فهم كليهما على كتابة TypeScript أكثر أمانًا.
تحقق سريع
أي تصريح يمنع التوسيع إلى النوع الأساسي؟
ما تعلمته
أصبحت تفهم الآن توسيع النوع، أي كيفية توسيع TypeScript للأنواع المستنتجة، وتضييق النوع، أي كيفية إنتاج الفحوص الشرطية لأنواع دقيقة. استخدم as const لمنع التوسيع، وفحوص تدفق التحكم لتضييق الاتحادات بأمان.
الأسئلة الشائعة
هل درس «آليات توسيع الأنواع وتضييقها» مجاني؟
نعم — نص درس «آليات توسيع الأنواع وتضييقها» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة TypeScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة TypeScript Academy 4 دروس في المجموع.
ماذا ستتعلم في «آليات توسيع الأنواع وتضييقها»؟
تعلّموا كيفية توسيع TypeScript للأنواع ومتى ينبغي منع ذلك تتمرن على TypeScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ TypeScript Academy؟
لا تُشترط خبرة سابقة. TypeScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «آليات توسيع الأنواع وتضييقها»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس TypeScript Academy هذا؟
نعم. كل درس في TypeScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- آليات توسيع الأنواع وتضييقها
- تحديد النوع السياقي: الاستدلال من السياق
- التحقق من الخصائص الزائدة وحداثة الكائنات
- تأكيدات const وas const