روابط سريعة
TypeScript هي لغة برمجة مُصممة لتنفيذ مشاريع JavaScript ضخمة ، صممتها Microsoft. فقد تم على سبيل المثال برمجة بعض الأدوات مثل Azure Management Portal التي تبلغ عدد أسطر تعليماتها البرمجية 1.2 مليون، وتطبيق Visiual Studio Code الذي يبلغ عدد أسطر تعليماتها البرمجية 300 ألف باستخدام TypeScript. تُقدم TypeScript ميزات عديدة لدعم مشاريع JavaScript الكبيرة مثل أدوات تطوير أفضل والتحقق من الأنواع عند الترجمة والتوثيق على مستوى الأكواد.
تتيح لك TypeScript إضافة كتابة ثابتة إلى قاعدة التعليمات البرمجية الخاصة بك. بفضل نظام الكتابة القوي ، تُوفر TypeScript إمكانية قراءة مُحسَّنة للكود والقدرة على اكتشاف الأخطاء أثناء وقت الترجمة.
أحد الجوانب الأكثر فائدة في TypeScript هو أنواع الأدوات المساعدة المُضمَّنة ، والتي يُمكن أن تُبسط جهود البرمجة لديك وتُوفر وقت التطوير الثمين. ألقِ نظرة على أنواع الأدوات المُساعدة في TypeScript التي لا بد من معرفتها والتي يُمكن أن تُساعدك في كتابة تعليمات برمجية آمنة بسهولة. تحقق من أفضل التطبيقات مفتوحة المصدر لتعديل WYSIWYG HTML.
1. الأنواع الخدمية Partial
تُتيح لك الأنواع الخدمية Partial (Utility type) من TypeScript جعل أي خصائص لكائن اختيارية. تُتيح لك إنشاء كائنات بخصائص مُعينة قد تكون مفقودة أو غير مُحددة. خذ على سبيل المثال:
interface User { name: string; age: number; email: string; }
باستخدام الأنواع الخدمية Partial ، يُمكنك إنشاء نوع جديد مع تعيين جميع خصائص واجهة المستخدم على أنها اختيارية:
type OptionalUser = Partial<User>
الآن ، يُمكنك إنشاء مثيل من نوع OptionalUser مع تحديد بعض الخصائص فقط:
const user: OptionalUser = { name: “John” };
قد تواجه مواقف تحتاج فيها إلى إنشاء كائن بخصائص اختيارية مُعينة. يمكن أن يكون هذا مفيدًا خاصةً عند إنشاء النماذج التي تحتوي على حقول مُتعددة ، حيث قد لا تكون جميعها مطلوبة وفي مثل هذه الحالات ، قد تكون الأنواع الخدمية Partial أمرًا حيويًا.
2. النوع الخدمي Pick
يُمكن أن يُساعدك النوع الخدمي Pick من TypeScript في إنشاء نوع جديد عن طريق اختيار مجموعة فرعية فقط من الخصائص من نوع موجود. يكون مفيدًا عندما تحتاج إلى تضييق نطاق كائن أكبر إلى عدد قليل من الخصائص المطلوبة أو إذا كنت ترغب في فرض كتابة صارمة على الخصائص التي تحتاجها.
interface User { location: string; age: number; email: string; } type PersonWithoutEmail = Pick<User, ‘location’ | ‘age’>; const person: PersonWithoutEmail = { location: ‘USA’, age: 30 };
في هذا المثال ، تُحدد الواجهة المسماة “User” ثلاث خصائص: البريد الإلكتروني والعمر والمكان.
باستخدام النوع الخدمي Pick ، يُمكنك استخراج خصائص “المكان” و “العمر” بشكل انتقائي من واجهة User ، مما يُؤدي إلى إنشاء نوع جديد يسمى “PersonWithoutEmail”.
يُمكنك بعد ذلك إنشاء نسخة جديدة من النوع “PersonWithoutEmail” وتعيين قيم لخصائص “المكان” و “العمر” فقط. نظرًا لأن خاصية “البريد الإلكتروني” قد تم حذفها من هذا النوع ، فلا يُمكنك تعيينها للكائن.
باستخدام النوع الخدمي Pick ، يُمكنك إنشاء نوع جديد يتضمن الخصائص التي تُريدها فقط. يُمكن أن يساعد ذلك في جعل كودك أكثر قابلية للقراءة وأسهل في العمل معه.
3. النوع الخدمي Readonly
يُشير النوع الخدمي Readonly إلى أنَّ سمات الكائن لا يُمكن تغييرها بعد إنشائها. يضمن هذا النوع تناسق بيانات الكائن على المدى الطويل ، مما ينتج عنه معالجة أكثر سلاسة وأمانًا للكود.
interface User { readonly name: string; readonly age: number; readonly email: string; }
باستخدام النوع الخدمي Readonly ، يُمكنك إنشاء نوع جديد مع تعيين جميع خصائص واجهة المستخدم للقراءة فقط:
type ReadonlyUser = Readonly<User>
يُمكنك تحديد قيم الخاصية عند إنشاء نسخة ReadonlyUser ::
const user: ReadonlyUser = { name: “John”, age: 30, email: “[email protected]” };
عندما تقوم بتمييز خصائص عنصر ما على أنها للقراءة فقط ، فإنَّ محاولة تعديل قيم هذه الخصائص تُصبح مستحيلة:
user.name = “Jane”; // Error: Cannot assign to ‘name’ because it is a read-only property.
النوع الخدمي Readonly مُهم بشكل خاص في المواقف التي تُريد فيها التأكد من أن كائنًا معينًا لا يتغير ، بغض النظر عن الإشارة إليه. على سبيل المثال ، إذا كان لديك كائن يحتوي على إعدادات تكوين مُهمة ، فقد ترغب في التأكد من بقائه بدون تغيير.
4. النوع الخدمي Required
يضمن هذا النوع وجود جميع الخصائص الأساسية للكائن ، بينما يُوفر النوع الخدمي Partial مزيدًا من المرونة من خلال السماح لك بتحديد مجموعة فرعية من الخصائص مع ترك الخصائص الأخرى اختيارية. يُمكن أن يكون هذا مفيدًا في المواقف التي قد لا تكون فيها بعض الخصائص ضرورية أو عرضة للتغيير.
interface User { name: string; location: number; address: string; }
من خلال استخدام النوع الخدمي Required ، من المُمكن إنشاء نوع جديد يجمع كل سمات واجهة المستخدم مع طلب وجود كل من هذه الخصائص. لا يمكن إنشاء مثيل RequiredUser إلا بعد تعيين جميع خصائصه بشكل صحيح.
const user: RequiredUser = { name: “John Doe”, location: “USA”, address: “Kansas 9745–0622” };
يضمن استخدام النوع الخدمي Required وجود جميع الخصائص المطلوبة داخل الكائن.
5. النوع الخدمي Omit
يسمح لك النوع الخدمي Omit بإنشاء نوع جديد عن طريق استبعاد خصائص مُعينة من نوع موجود.
interface Person { location: string; age: number; email: string; } type PersonWithoutEmail = Omit<Person, ‘email’>; const person:PersonWithoutEmail = { location: “USA”; age : 30 };
تحتوي واجهة Person على ثلاث خصائص: العمر والمكان والبريد الإلكتروني. يستخدم النوع PersonWithoutEmail النوع الخدمي Omit لتضمين جميع خصائص كائن Person ، باستثناء البريد الإلكتروني. يُمكنك بعد ذلك إنشاء مثيل من هذا النوع الجديد ، بدون تحديد قيمة لخاصية البريد الإلكتروني.
يجب أن تضع في اعتبارك أن النوع الخدمي Omit يتشارك أوجه تشابه كبيرة مع النوع الخدمي Pick ، حيث أنه يُمكِّنك من ابتكار نوع جديد باستخدام الخصائص التي تحددها فقط.
6. النوع الخدمي Record
يُمكنك استخدام النوع الخدمي Record لتعريف نوع كائن يكون للمفاتيح والقيم نوع معين له. تعريفه هو:
type Record<K extends keyof any, T> = { [P in K]: T;};
يربط هذا النوع T بقيمة كل مفتاح ، بينما K هو اتحاد مفاتيح من أي نوع. الكائن الناتج له نوع خاصيته P مضبوطة على T.
ضع في اعتبارك سيناريو نوع الكائن مع مفاتيح السلسلة والقيم الرقمية. في هذه الحالة ، يُمكنك تطبيق نوع النوع الخدمي Record على النحو التالي:
type MyRecord = Record<string, number>; const myObject: MyRecord = { “foo”: 1, “bar”: 2, “baz”: 3, }
يُحدد هذا المثال MyRecord كنوع كائن بمفاتيح سلسلة وقيم رقمية. يمثل كائن myObject نموذجًا لهذا النوع ، مع تعيين المفاتيح “foo” و “bar” و “baz” للقيم المقابلة لها. تحقق من أفضل أدوات مُراقبة تغيير محتوى مواقع الويب المجانية والمدفوعة.
تبسيط التعليمات البرمجية باستخدام الأنواع الخدمية من TypeScript
كشفت هذه المقالة عن القوة الهائلة للأنواع الخدمية المُتوفرة في TypeScript — يُمكن أن تكون أحد الأصول القيمة عندما يتعلق الأمر بتبسيط التعليمات البرمجية الخاصة بك وجعل التطوير أسرع وأكثر كفاءة. يُمكن لهذه الأنواع من الأدوات و TypeScript بشكل عام أن تفعل المعجزات للتأكد من أنَّ أكوادك دائمًا خالية من الأخطاء وتلتزم بهياكل مُعينة. يُمكنك الإطلاع الآن على كيف تُصبح مدرس برمجة كعامل مُستقل.