0Pricing
TypeScript Academy · درس

ما هي DSL على مستوى النوع

استخدموا الأنواع لتقييد واجهة برمجة سلسة بالبرامج الصالحة

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

ما هي DSL على مستوى النوع؟

تستخدم DSL على مستوى النوع (لغة خاصة بالمجال) أنواع TypeScript لتقييد API، بحيث لا تُترجم إلا البرامج الصحيحة. وتعمل الأنواع كقواعد نحوية، إذ تُرفض التركيبات غير الصحيحة قبل تشغيل الكود أصلًا.

لغات DSL المضمّنة

تعيش DSL المضمّنة داخل اللغة المضيفة (TypeScript هنا) بدلًا من أن تكون محللًا منفصلًا. تكتبون TypeScript عاديًا، لكن نظام الأنواع يفرض قواعد DSL.

مثال مألوف

لقد استخدمتم DSLs على مستوى النوع من قبل: أداة إنشاء استعلامات لا تسمح إلا بأسماء أعمدة صحيحة، أو موجّه يستنتج المعلمات من المسار. وتشفّر الأنواع ما تسمح به API.

تقييد واجهة API متسلسلة

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

interface Empty { from(t: string): HasFrom; }
interface HasFrom { where(c: string): HasFrom; select(): string; }

declare const q: Empty;
q.from("users").select();      // ok
q.select();                    // Error: select not on Empty

آلات الحالات في الأنواع

يُسمّى هذا النمط آلة حالات على مستوى النوع: كل واجهة هي حالة، وكل دالة هي انتقال إلى حالة أخرى. ويتتبّع المترجم الآلة أثناء تسلسل الاستدعاءات.

لماذا لا نكتفي بعمليات التحقق وقت التشغيل؟

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

معلمات الأنواع الوهمية

تحمل DSLs غالبًا معلومات ضمن معلمات أنواع وهمية: أنواع عامة لا توجد إلا وقت الترجمة لتتبّع الحالة المتراكمة (الأعمدة المحددة والمتغيرات المرتبطة) من دون تكلفة وقت التشغيل.

interface Query<Selected extends string> {
  select<C extends string>(c: C): Query<Selected | C>;
}

الأنواع الحرفية بوصفها رموزًا

تعمل الأنواع الحرفية للسلاسل النصية بوصفها رموز DSL. وبدمجها مع القوالب النصية والاتحادات، تتيح لنظام الأنواع تحليل المحتوى النصي لـ DSL.

type Direction = "asc" | "desc";
declare function orderBy(col: string, dir: Direction): void;
orderBy("age", "asc");   // ok
orderBy("age", "up");    // Error: not a Direction

اللبنات الأساسية

تجمع DSLs على مستوى النوع بين: الأنواع العامة للحالة، والأنواع الشرطية للتفرع، والقوالب النصية لتحليل السلاسل، والأنواع المعيّنة لتحويل البنى. وستستخدم الدروس اللاحقة كل واحدة من هذه الأدوات.

المفاضلات

توفر DSLs على مستوى النوع ضمانات قوية، لكنها قد تنتج أخطاء غامضة وتؤدي إلى إبطاء الترجمة عند الإفراط في استخدامها. وتوازن DSLs الجيدة بين الأمان وسهولة قراءة رسائل الخطأ (وسيتناول درس لاحق ذلك).

لماذا يهم هذا

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

تحقّق سريع

اختبر مدى فهمك لـ DSLs على مستوى النوع.

مراجعة

تستخدم DSL على مستوى النوع أنواع TypeScript بوصفها قواعد نحوية، فلا تُترجم إلا البرامج الصحيحة. وتمثّل واجهات API المتسلسلة آلات حالات، إذ تُرجع كل دالة نوعًا يقيّد الحالة التالية، وتستخدم الأنواع العامة الوهمية، ورموز الأنواع الحرفية، والأنواع الشرطية، وأنواع القوالب النصية، والأنواع المعيّنة بوصفها لبنات أساسية، مما يوفر ملاحظات مبكرة داخل المحرر.

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

هل درس «ما هي DSL على مستوى النوع» مجاني؟

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

ماذا ستتعلم في «ما هي DSL على مستوى النوع»؟

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

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

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

كم من الوقت يستغرق درس «ما هي DSL على مستوى النوع»؟

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

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

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

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

  1. ما هي DSL على مستوى النوع
  2. تصميم DSL للاستعلامات السلسة
  3. التحقق من المدخلات وقت التجميع
  4. رسائل الأخطاء في DSL على مستوى النوع
← العودة إلى TypeScript Academy