0Pricing
TypeScript Academy · درس

‏TypeScript 5.0: المزيّنات القياسية ومعاملات الأنواع const

استخدموا مقترح المزيّنات الجديد ومعاملات الأنواع العامة const

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

نظرة عامة على TypeScript 5.0

قدّم TypeScript 5.0 اقتراح decorators المعياري من TC39 (المرحلة 3)، ومعلمات الأنواع const، وصيغة جديدة للوحدات الحرفية، وتحسينات كبيرة في الأداء.

// TS 5.0 release: March 2023
// npm install typescript@5

Decorators في المرحلة 3

ينفّذ TS 5.0 اقتراح decorators الرسمي من TC39 في المرحلة 3، وهو مختلف عن decorators التجريبية القديمة. ولم تعد هناك حاجة إلى experimentalDecorators: true.

// New standard decorator — no experimentalDecorators flag needed
function logged(target: Function, ctx: ClassDecoratorContext) {
  return class extends (target as any) {
    constructor(...args: any[]) {
      console.log("Creating", target.name);
      super(...args);
    }
  };
}

@logged
class User { constructor(public name: string) {} }

كائن سياق Decorator

تتلقى decorators الجديدة كائنًا مكتوبًا من النوع ClassDecoratorContext أو MethodDecoratorContext، ويحتوي على بيانات وصفية حول العنصر الذي تطبّق عليه decorator.

function sealed(_: Function, ctx: ClassDecoratorContext) {
  ctx.addInitializer(function(this: any) {
    Object.seal(this);
  });
}

Decorators للطرق في TS 5.0

تتلقى decorators الخاصة بالطرق الطريقة وكائنًا من النوع ClassMethodDecoratorContext، لتحل محل التوقيع القديم (target, key, descriptor).

function measure(_: Function, ctx: ClassMethodDecoratorContext) {
  return function(this: any, ...args: any[]) {
    const start = performance.now();
    const result = (_.apply as any)(this, args);
    console.log(ctx.name, performance.now() - start, "ms");
    return result;
  };
}

معلمات الأنواع const

يؤدي استخدام const مع معلمة نوع إلى جعل TypeScript يستنتج الأنواع الحرفية للوسائط بدلًا من توسيعها إلى النوع الأساسي.

function identity<const T>(val: T): T { return val; }
const a = identity("hello");      // type: "hello" (not string)
const b = identity([1, 2, 3]);    // type: readonly [1, 2, 3]

الأنواع العامة const مقارنةً بـ as const

تطبّق معلمات الأنواع const تأثير التضييق تلقائيًا، فلا يحتاج المستدعون إلى إضافة as const في كل موضع استدعاء.

// Without const param: callers need as const
function makeRoute<T extends string>(path: T) { return path; }
const r1 = makeRoute("/home" as const); // "/home"

// With const param: automatic
function makeRoute2<const T extends string>(path: T) { return path; }
const r2 = makeRoute2("/home"); // "/home" — no as const needed

حل الوحدات باستخدام Bundler

أضاف TS 5.0 الخيار moduleResolution: "bundler" للمشاريع التي تستخدم Vite أو esbuild أو أدوات تجميع مشابهة تتولى حل الوحدات بنفسها.

{
  "compilerOptions": {
    "module": "ESNext",
    "moduleResolution": "bundler"
  }
}

verbatimModuleSyntax

يفرض verbatimModuleSyntax: true استخدام import type في عمليات استيراد الأنواع فقط، مما يمنع تسرّب عمليات الاستيراد إلى وقت التشغيل.

// tsconfig.json
{ "compilerOptions": { "verbatimModuleSyntax": true } }

// Now this errors: must be import type
import { User } from "./types"; // Error if User is only a type
import type { User } from "./types"; // OK

تحسينات الأداء

حسّن TS 5.0 التخزين المؤقت لإنشاء الأنواع وأداء التضييق، مما جعل المشاريع الكبيرة أسرع من دون الحاجة إلى تغيير الشيفرة.

# TS 5.0 compile benchmarks: ~10-15% faster on large projects

الترحيل من Decorators القديمة

لا تزال experimentalDecorators القديمة تعمل، لكنها ستصبح مهجورة في النهاية. انتقل إلى decorators الخاصة بـ TC39 لضمان التوافق مستقبلًا.

// Legacy: requires experimentalDecorators: true
@Component({ selector: "app-root" })
class AppComponent {}

// New TC39 decorator: no flag needed (but Angular/NestJS need updates)

مراجعة: TypeScript 5.0

قدّم TypeScript 5.0 decorators المعيارية من TC39، ومعلمات الأنواع const للاستنتاج التلقائي للأنواع الحرفية، وmoduleResolution: "bundler"، وverbatimModuleSyntax، وتحسينات كبيرة في الأداء.

تحقق سريع

ماذا يفعل استخدام const مع معلمة نوع؟

ما تعلمته

TypeScript 5.0: تحل decorators المعيارية من TC39 محل decorators التجريبية، وتضيّق معلمات الأنواع const الوسائط تلقائيًا إلى أنواع حرفية، ويدعم moduleResolution: "bundler" أدوات البناء الحديثة، ويفرض verbatimModuleSyntax استخدام import type.

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

هل درس «‏TypeScript 5.0: المزيّنات القياسية ومعاملات الأنواع const» مجاني؟

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

ماذا ستتعلم في «‏TypeScript 5.0: المزيّنات القياسية ومعاملات الأنواع const»؟

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

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

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

كم من الوقت يستغرق درس «‏TypeScript 5.0: المزيّنات القياسية ومعاملات الأنواع const»؟

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

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

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

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

  1. ‏TypeScript 5.0: المزيّنات القياسية ومعاملات الأنواع const
  2. ‏TypeScript 5.1-5.2: تحسينات الاستدلال
  3. ‏TypeScript 5.3-5.4: تضييق جديد وNoInfer
  4. ‏TypeScript 5.5+: التصريحات المعزولة وما بعدها
← العودة إلى TypeScript Academy