مقدمة إلى أنواع TypeScript المرسومة

توفر الأنواع المرسومة في TypeScript طريقة لإنشاء أنواع جديدة عن طريق تحويل الأنواع الموجودة. وهي أداة قوية للتعامل مع عمليات النوع المعقدة وضمان سلامة النوع في تطبيقات TypeScript. تقدم هذه المقالة الأنواع المرسومة، وتشرح تركيبها، وتقدم أمثلة لتوضيح استخدامها.

ما هي الأنواع المرسومة؟

تسمح الأنواع المرسومة بإنشاء أنواع جديدة من خلال تطبيق تحويل على كل خاصية من خصائص النوع الحالي. وغالبًا ما تُستخدم لتعديل الأنواع أو توسيعها بطريقة مرنة. والبنية الأساسية للنوع المرسوم هي:

type MappedType = {
  [K in keyof T]: NewType;
};

في هذا النحو:

  • T هو النوع الأصلي.
  • يمثل K كل مفتاح في T.
  • NewType هو النوع الجديد المخصص لكل خاصية.

مثال أساسي للأنواع المرسومة

فيما يلي مثال بسيط لنوع مُعيّن يقوم بتحويل كافة خصائص نوع معين إلى قراءة فقط:

type ReadOnly = {
  readonly [K in keyof T]: T[K];
};

type User = {
  name: string;
  age: number;
};

type ReadOnlyUser = ReadOnly;

في هذا المثال، يقوم النوع المحدد ReadOnly بتحويل جميع خصائص النوع User لتكون للقراءة فقط، مما يؤدي إلى نوع جديد ReadOnlyUser حيث تكون جميع الخصائص غير قابلة للتغيير.

أنواع مُعيَّنة باستخدام تحويلات النوع

يمكن أيضًا استخدام الأنواع المرسومة لتحويل الأنواع بطرق أكثر تعقيدًا. على سبيل المثال، نوع مرسوم يجعل جميع الخصائص اختيارية:

type Partial = {
  [K in keyof T]?: T[K];
};

type User = {
  name: string;
  age: number;
};

type PartialUser = Partial;

في هذا المثال، يجعل النوع Partial المطابق جميع خصائص النوع User اختيارية، مما يؤدي إلى نوع جديد PartialUser حيث تكون كل خاصية اختيارية.

استخدام الأنواع المعيّنة مع الأنواع الشرطية

يمكن دمج الأنواع المرسومة مع الأنواع الشرطية لإجراء عمليات نوع أكثر تعقيدًا. على سبيل المثال، إنشاء نوع يتضمن فقط خصائص نوع معين:

type OnlyStrings = {
  [K in keyof T]: T[K] extends string ? T[K] : never;
};

type User = {
  name: string;
  age: number;
  email: string;
};

type StringProperties = OnlyStrings;

في هذا المثال، يقوم النوع المطابق OnlyStrings بتصفية الخصائص التي ليست من النوع string، مما يؤدي إلى نوع جديد StringProperties يتضمن فقط خصائص السلسلة من النوع User.

أنواع الخرائط المتقدمة

تتضمن حالات الاستخدام المتقدمة للأنواع المرسومة إنشاء أنواع تعدل الأنواع الموجودة استنادًا إلى شروط مختلفة. على سبيل المثال، نوع مرسوم يضيف لاحقة إلى اسم كل خاصية:

type WithSuffix<T, S extends string> = {
  [K in keyof T as `${string & K}${S}`]: T[K];
};

type User = {
  name: string;
  age: number;
};

type UserWithSuffix = WithSuffix<User, "Prop">;

في هذا المثال، يضيف النوع المحدد WithSuffix لاحقة إلى كل اسم خاصية من النوع User، مما يؤدي إلى نوع جديد UserWithSuffix حيث تحتوي أسماء الخصائص على اللاحقة المحددة.

خاتمة

تُعد الأنواع المرسومة في TypeScript ميزة متعددة الاستخدامات تتيح للمطورين إنشاء أنواع جديدة من خلال تحويل الأنواع الموجودة. من خلال فهم الأنواع المرسومة والاستفادة منها، يمكن للمطورين إدارة تحويلات الأنواع المعقدة وضمان أمان أكبر للأنواع في كود TypeScript الخاص بهم. توفر الأنواع المرسومة إمكانيات قوية لتحسين وتخصيص تعريفات الأنواع في تطبيقات TypeScript.