0Pricing
TypeScript Academy · درس

الأنواع الموسومة لمنع الخلط بين الوحدات

امنع الخلط بين الوحدات والعلامات من خلال تقاطع الأنواع الأساسية مع خصائص العلامات الوهمية، وأنشئها عبر دوال المصانع فقط.

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

مقدمة

الهدف: فصل القيم المتشابهة على مستوى النوع. لا يستطيع number عادي التمييز بين الأمتار والثواني؛ لكن يمكن لعلامة brand القيام بذلك.

  • من دون تكلفة وقت التشغيل
  • واجهات API وإعادة هيكلة أكثر أمانًا
  • الإنشاء من خلال المصانع فقط

وسم الوحدات البدائية

تحافظ علامات Brand على فصل الوحدات أثناء الترجمة؛ ويفشل ترتيب المعاملات الخاطئ عند فحص الأنواع.

type Meter = number & { readonly __brand: "meter" }
type Second = number & { readonly __brand: "second" }

function meter(n: number): Meter { return n as Meter }
function second(n: number): Second { return n as Second }

const d = meter(100)
const t = second(9)

function speed(dist: Meter, time: Second) { return (dist as number) / (time as number) }

// speed(t, d)  // compile error: brands do not match

مساعد Brand عام

استخدموا مساعدًا عامًا باسم Brand عبر المجالات المختلفة: المعرّفات المكتوبة، والرموز، والمؤشرات، وغير ذلك.

type Brand<Tag extends string, T> = T & { readonly __brand: Tag }

type UserId = Brand<"UserId", string>
type OrderId = Brand<"OrderId", string>

function userId(x: string): UserId { return x as UserId }
function orderId(x: string): OrderId { return x as OrderId }

function findUser(id: UserId) { /* ... */ }

const u = userId("u_123")
const o = orderId("o_456")
// findUser(o) // error: OrderId not assignable to UserId

وسم unique symbol

يمنع وسم unique symbol تعارض الأسماء وتسربها إلى مساحات الأسماء العامة.

declare const MeterSym: unique symbol

type Meter2 = number & { readonly [MeterSym]: "meter" }

function asMeter2(n: number): Meter2 { return n as Meter2 }

const m2 = asMeter2(5)
// const wrong: Meter2 = 5  // discourage raw assignment; prefer factories

المصانع والتحقق

ضع الوسم داخل factory: تحقّق أولًا، ثم أضف الوسم، ثم استخدم القيمة. تجنّب استخدام as بشكل عشوائي في مواضع الاستدعاء.

type NonEmptyString = string & { readonly __brand: "NonEmpty" }

function nonEmpty(s: string): NonEmptyString | null {
  return s.trim().length > 0 ? (s as NonEmptyString) : null
}

function makeSlug(s: NonEmptyString) {
  return (s as string).toLowerCase().replace(/\s+/g, "-")
}

const ok = nonEmpty(" Hello ")
if (ok) { makeSlug(ok) }  // safe: validated & branded first

نصائح ومزالق

أفضل الممارسات:

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

التحقق من الوسم

تحقق سريع: ما النمط الذي يمنع الخلط بين الوحدات والوسوم؟

مراجعة

مراجعة: تفصل الأنواع الموسومة وغير الشفافة بين القيم المتشابهة ظاهريًا، مثل الأمتار والثواني وUserId وOrderId. أنشئ هذه القيم عبر المصانع، واستخدمها عبر واجهات برمجة التطبيقات، وتخلّص من حالات الخلط غير المقصودة.

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

هل درس «الأنواع الموسومة لمنع الخلط بين الوحدات» مجاني؟

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

ماذا ستتعلم في «الأنواع الموسومة لمنع الخلط بين الوحدات»؟

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

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

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

كم من الوقت يستغرق درس «الأنواع الموسومة لمنع الخلط بين الوحدات»؟

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

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

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

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

  1. الأنواع الموسومة لمنع الخلط بين الوحدات
  2. المعرّفات الموسومة وأنماط نمذجة المجال
  3. نمذجة المجال — التجميعات والثوابت والخدمات
← العودة إلى TypeScript Academy