دروس الوحدة (2/2)
الأنواع المعينة
تتيح لك الأنواع المعينة إنشاء أنواع جديدة عن طريق تحويل خصائص الأنواع الموجودة، واحدًا تلو الآخر. وهي مبنية على بناء جملة الحلقة فوق المفاتيح باستخدام عامل التشغيل keyof.
type Mapped<T> = {
[P in keyof T]: T[P];
};يعرض هذا المثال نوعًا معينًا مطابقًا للنوع الأصلي: فهو يتكرر فوق كل مفتاح P في keyof T ويعين نفس النوع T[P].
معدّلات قابلية التغيير والاختيار
يمكننا إضافة أو إزالة المعدلات مثل readonly و ? (اختياري) عن طريق وضع بادئة لها بـ + (إضافة، افتراضي) أو - (إزالة).
على سبيل المثال، لإزالة الاختيارية من جميع خصائص النوع (مما يجعلها مطلوبة):
type Concrete<T> = {
[P in keyof T]-?: T[P];
};يقوم المُعدِّل -? بإزالة علامة الاختيار من كل خاصية.
إعادة تعيين المفتاح باستخدام as
في TypeScript 4.1+، يمكنك إعادة تعيين المفاتيح في نوع معين باستخدام جملة as والأنواع الحرفية للقالب.
type WriteSetters<T> = {
[K in keyof T as `set${Capitalize<string & K>}`]: (value: T[K]) => void;
};نحن هنا نغير اسم كل خاصية K إلى set[CapitalizedKey] ونعدل نوعها إلى دالة ضبط.
جربه بنفسك
التمرين 1: جعل الخصائص فارغة
قم بتعريف نوع معين عام Nullable<T> الذي يأخذ كائن T ويحول كل خاصية بحيث يمكنه أيضًا قبول القيمة null (على سبيل المثال، T[K] | null).
إظهار التلميح
استخدم بناء الجملة [K في keyof T]: T[K] | باطل؛ داخل كائن الكتابة المعين.
الحل متاح بعد 3 من المحاولات
التمرين 2: إنشاء حروف ديناميكية باستخدام as
قم بإنشاء نوع معين باسم GetterNames<T> يقوم بتحويل مفاتيح الكائن T عن طريق وضع بادئة لها بـ "get" وتكبير المفتاح الأصلي (استخدم الكتابة بالأحرف الكبيرة). على سبيل المثال، إذا كان المفتاح اسمًا، فيجب أن يصبح getName. اضبط نوع الخصائص على () => T[K].
إظهار التلميح
استخدمه كـ \`get\${Capitalize<string & K>}\` لإعادة تعيين المفتاح و () => T[K] كنوع إرجاع الخاصية.
الحل متاح بعد 3 من المحاولات