دروس الوحدة (1/2)
الأنواع الشرطية والاستنتاج
تسمح لك الأنواع الشرطية بالتعبير عن قرارات النوع غير التافهة بناءً على علاقات الميراث. يشبه بناء الجملة عامل التشغيل الثلاثي لجافا سكريبت:
T extends U ? X : Yإذا كان النوع T قابلاً للتعيين إلى U، فسيكون النوع الناتج X، وإلا فسيكون Y.
الأنواع الشرطية الأساسية
يقوم النوع الشرطي بتقييم الشرط في وقت الترجمة:
type IsNumber<T> = T extends number ? true : false;
type A = IsNumber<number>; // true
type B = IsNumber<string>; // falseيكون هذا النمط قويًا للغاية عند دمجه مع الأدوية العامة لإنشاء أنواع أدوات مساعدة مرنة وديناميكية.
نوع الاستخراج باستخدام infer
داخل جملة extends من النوع الشرطي، يمكننا استخدام الكلمة الأساسية infer للإعلان عن متغير النوع الذي سيتم استنتاجه بواسطة المترجم.
على سبيل المثال، إذا أردنا استخراج نوع الإرجاع للدالة:
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
قم بإنشاء نوع عام يسمى IsString<T> يُرجع النوع الحرفي صحيحًا إذا قام T بتوسيع السلسلة، وإلا فسيكون خطأ.
إظهار التلميح
استخدم نوع بناء الجملة IsString<T> = T Extends string ؟ صحيح: كاذب؛ للتحقق من النوع.
الحل متاح بعد 3 من المحاولات
التمرين 2: استخراج نوع من مصفوفة باستخدام infer
قم بتعريف نوع عام UnpackArray<T> الذي يستخدم الاستدلال لاستخراج نوع العنصر من المصفوفة T. إذا كان T مصفوفة (على سبيل المثال U[])، قم بإرجاع U، وإلا فسيتم إرجاع نفس النوع T.
إظهار التلميح
استخدم T يمتد (يستنتج U)[] ؟ U : T للإعلان عن متغير النوع المستنتج وإرجاعه U.
الحل متاح بعد 3 من المحاولات