الانتقال إلى المحتوى الرئيسي
الوحدة 6 · الدرس 1 من 211/14 في الدورة~15 min
دروس الوحدة (1/2)

الأنواع الشرطية والاستنتاج

تسمح لك الأنواع الشرطية بالتعبير عن قرارات النوع غير التافهة بناءً على علاقات الميراث. يشبه بناء الجملة عامل التشغيل الثلاثي لجافا سكريبت:

TS
T extends U ? X : Y

إذا كان النوع T قابلاً للتعيين إلى U، فسيكون النوع الناتج X، وإلا فسيكون Y.


الأنواع الشرطية الأساسية

يقوم النوع الشرطي بتقييم الشرط في وقت الترجمة:

TS
type IsNumber<T> = T extends number ? true : false;

type A = IsNumber<number>; // true
type B = IsNumber<string>; // false

يكون هذا النمط قويًا للغاية عند دمجه مع الأدوية العامة لإنشاء أنواع أدوات مساعدة مرنة وديناميكية.


نوع الاستخراج باستخدام infer

داخل جملة extends من النوع الشرطي، يمكننا استخدام الكلمة الأساسية infer للإعلان عن متغير النوع الذي سيتم استنتاجه بواسطة المترجم.

على سبيل المثال، إذا أردنا استخراج نوع الإرجاع للدالة:

TS
type GetReturnType<T> = T extends (...args: any[]) => infer R ? R : never;

type ExampleFunction = () => string;
type Return = GetReturnType<ExampleFunction>; // string

في هذا المثال، infer R يخبر TypeScript بأن يحدد تلقائيًا نوع الإرجاع للدالة ويجعلها متاحة كـ R في الفرع الموجب للشرطية.


جربه بنفسك

التمرين 1: النوع IsString

تمرين#ts.m6.l1.e1
المحاولات: 0جارٍ التحميل…

قم بإنشاء نوع عام يسمى IsString<T> يُرجع النوع الحرفي صحيحًا إذا قام T بتوسيع السلسلة، وإلا فسيكون خطأ.

جارٍ تحميل المحرر…
إظهار التلميح

استخدم نوع بناء الجملة IsString<T> = T Extends string ؟ صحيح: كاذب؛ للتحقق من النوع.

الحل متاح بعد 3 من المحاولات

التمرين 2: استخراج نوع من مصفوفة باستخدام infer

تمرين#ts.m6.l1.e2
المحاولات: 0جارٍ التحميل…

قم بتعريف نوع عام UnpackArray<T> الذي يستخدم الاستدلال لاستخراج نوع العنصر من المصفوفة T. إذا كان T مصفوفة (على سبيل المثال U[])، قم بإرجاع U، وإلا فسيتم إرجاع نفس النوع T.

جارٍ تحميل المحرر…
إظهار التلميح

استخدم T يمتد (يستنتج U)[] ؟ U : T للإعلان عن متغير النوع المستنتج وإرجاعه U.

الحل متاح بعد 3 من المحاولات