TypeScript Academy · درس

مزيّنات الدوال والخصائص

زيّنوا الدوال والخصائص الفردية

الدرس 2 من 413 خطوة

مزيّنات الدوال والخصائص درس مجاني في TypeScript Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في TypeScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة TypeScript Academy 4 دروس في المجموع.

مرحبًا

يتناول هذا الدرس Decorators الخاصة بالدوال والخصائص في TypeScript.

مقدمة

تُعد Decorators مقترحًا من المرحلة الثالثة في JavaScript وميزة تجريبية في TypeScript لإضافة البيانات الوصفية وتعديل الفئات وأعضائها.

المفهوم الأساسي

إن Decorator دالة تُطبَّق على فئة أو دالة أو خاصية أو معامل باستخدام صيغة @.
@sealed
class BugReport {
  type = 'report';
  title: string;
  constructor(t: string) { this.title = t; }
}

Decorator للفئات

تتلقى Decorators الخاصة بالفئات دالة المُنشئ، ويمكنها إعادة نسخة معدّلة.
function sealed(constructor: Function) {
  Object.seal(constructor);
  Object.seal(constructor.prototype);
}

Decorator للدوال

تتلقى Decorators الخاصة بالدوال الهدف واسم الخاصية ووصف الخاصية.
function log(target: any, key: string, desc: PropertyDescriptor) {
  const orig = desc.value;
  desc.value = function(...args: any[]) {
    console.log('Calling', key);
    return orig.apply(this, args);
  };
}

Decorator للخصائص

تتلقى Decorators الخاصة بالخصائص الهدف ومفتاح الخاصية. ولا يمكنها اعتراض عمليات القراءة والكتابة مباشرةً.
function readonly(target: any, key: string) {
  Object.defineProperty(target, key, { writable: false });
}

Decorator للمعاملات

تتلقى Decorators الخاصة بالمعاملات الهدف واسم الدالة وفهرس المعامل.
function required(target: any, key: string, index: number) {
  const meta = Reflect.getMetadata('required', target, key) || [];
  meta.push(index);
  Reflect.defineMetadata('required', meta, target, key);
}

مصانع Decorator

مصنع Decorator هو دالة تعيد Decorator، وتتلقى معاملات الإعداد.
function role(name: string) {
  return function(target: any, key: string) {
    Reflect.defineMetadata('role', name, target, key);
  };
}

class UserController {
  @role('admin')
  deleteUser() {}
}

Decorators في NestJS

يستخدم NestJS Decorators على نطاق واسع لوحدات التحكم وحقن الاعتماديات والتوجيه.
@Controller('users')
class UsersController {
  constructor(private usersService: UsersService) {}

  @Get()
  findAll(): User[] {
    return this.usersService.findAll();
  }
}

reflect-metadata

تعمل Decorators غالبًا مع polyfill الخاص بـ reflect-metadata لتخزين البيانات الوصفية واستردادها أثناء التشغيل.
import 'reflect-metadata';
// Enable in tsconfig: experimentalDecorators: true, emitDecoratorMetadata: true

ترتيب Decorators

تُطبَّق عدة Decorators على التصريح نفسه من الأسفل إلى الأعلى، أي إن آخر Decorator مكتوب يُقيَّم أولًا.
@first
@second
class Example {}
// Applied: second first, then first

تحقق سريع

ما إعداد TypeScript المطلوب لاستخدام Decorators؟

مراجعة

تستخدم Decorators صيغة @ لتعديل الفئات والدوال والخصائص والمعاملات. وتُفعَّل باستخدام experimentalDecorators في tsconfig، وتستخدمها أطر عمل مثل NestJS وAngular على نطاق واسع.
البدء مجانًا

تعلم TypeScript مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
101
الدروس
352

الأسئلة الشائعة

هل درس «مزيّنات الدوال والخصائص» مجاني؟

نعم — نص درس «مزيّنات الدوال والخصائص» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة TypeScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة TypeScript Academy 4 دروس في المجموع.

ماذا ستتعلم في «مزيّنات الدوال والخصائص»؟

زيّنوا الدوال والخصائص الفردية تتمرن على TypeScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ TypeScript Academy؟

لا تُشترط خبرة سابقة. TypeScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «مزيّنات الدوال والخصائص»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس TypeScript Academy هذا؟

نعم. كل درس في TypeScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. مزيّنات الفئات: تغليف السلوك
  2. مزيّنات الدوال والخصائص
  3. مزيّنات المعاملات والبيانات الوصفية
  4. المزيّنات في أطر العمل: مثال NestJS
← العودة إلى TypeScript Academy