0Pricing
TypeScript Academy · درس

سبب وجود satisfies

تعرّفوا إلى الفجوة بين التعليق والاستنتاج التي يسدّها satisfies

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

الهدفان المتعارضان

عند التصريح عن إعدادات، غالبًا ما تريد أمرين: التحقق من توافقها مع بنية معروفة، والاستدلال الدقيق على القيم الحرفية. وغالبًا ما يتعارض هذان الهدفان.

type Color = "red" | "green" | "blue";
// We want both: check the values AND remember exactly which ones.

التعليق النوعي يفقد التضييق الحرفي

تؤدي إضافة تعليق نوعي إلى التحقق من الكائن، لكنها توسّع القيم. إذ ينسى المصرّف القيم الحرفية الدقيقة التي كتبتها.

type Config = { color: string; retries: number };
const cfg: Config = { color: "red", retries: 3 };
// cfg.color is string, not "red" anymore.
console.log(cfg.color.toUpperCase());

لماذا يسبب التوسيع المشكلات

إذا جرى توسيع color إلى string، فستفقد القدرة على استخدامه في مواضع تتطلب القيمة الحرفية المحددة، مثل الفهرسة في نوع آخر.

const cfg = { color: "red" } as { color: string };
// const exact: "red" = cfg.color; // Error: string not assignable to "red"
console.log(cfg.color);

غياب التعليق النوعي يفقد التحقق

يؤدي حذف التعليق النوعي إلى الحفاظ على الاستدلال الدقيق، لكنه يزيل شبكة الأمان. فالأخطاء الإملائية والبنى غير الصحيحة تمر دون ملاحظة.

const cfg = { color: "rad", retries: 3 };
// No error on the typo "rad" because nothing validates it.
console.log(cfg.color);

فجوة التحقق

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

const palette = { primary: "blu" }; // typo, no error
console.log(palette.primary); // "blu"

التعرّف على المعامل satisfies

يعمل المعامل satisfies على التحقق من تعبير مقابل نوع، مع الحفاظ على النوع المستدل عليه بدقة. إنه يجمع أفضل ما في الخيارين.

type Config = { color: string; retries: number };
const cfg = { color: "red", retries: 3 } satisfies Config;
console.log(cfg.color); // type is "red", value validated

يحافظ satisfies على القيم الحرفية

بعد استخدام satisfies، تظل قيمة cfg.color هي القيمة الحرفية "red"، وليست string العامة. وهكذا يُحافَظ على الاستدلال.

type Config = { color: string };
const cfg = { color: "red" } satisfies Config;
const exact: "red" = cfg.color; // OK
console.log(exact);

يواصل satisfies إجراء التحقق

إذا لم يطابق الكائن النوع، فسيبلغ satisfies عن خطأ، تمامًا كما يفعل التعليق النوعي.

type Config = { retries: number };
// const bad = { retries: "three" } satisfies Config; // Error
const good = { retries: 3 } satisfies Config;
console.log(good.retries);

المثال المحفّز

لنفترض وجود خريطة للمسارات، بحيث يجب أن تكون المفاتيح مسارات معروفة، والقيم أسماء معالجات. نريد الإكمال التلقائي للمفاتيح والتحقق من القيم، وهذا ما يوفّره satisfies.

type Routes = Record<string, { method: "GET" | "POST" }>;
const routes = {
  home: { method: "GET" },
  submit: { method: "POST" }
} satisfies Routes;
console.log(routes.home.method); // "GET" literal

مقارنة الأساليب الثلاثة

التعليق النوعي: يتحقق ويوسّع. من دون تعليق نوعي: دقيق لكنه غير متحقق منه. satisfies: يتحقق ويحافظ على الدقة. لذلك يفوز الخيار الثالث في كائنات الإعدادات.

type C = { color: string };
const a: C = { color: "red" };          // widened
const b = { color: "red" };             // unvalidated
const c = { color: "red" } satisfies C; // validated + precise
console.log(a.color, b.color, c.color);

متى تستخدم satisfies

استخدم satisfies كلما عرّفت قيمة ثابتة يجب أن تتوافق مع نوع معين، وكنت تريد أيضًا استخدام محتوياتها الدقيقة لاحقًا.

type Sizes = Record<string, number>;
const sizes = { sm: 8, md: 16, lg: 24 } satisfies Sizes;
// keys "sm" | "md" | "lg" stay known for autocomplete
console.log(sizes.md);

اختبار سريع: لماذا نستخدم satisfies

اختبر فهمك لسبب وجود satisfies.

مراجعة: سبب وجود satisfies

تعلّمت أن التعليقات النوعية تتحقق من القيم لكنها توسّعها، وأن غياب التعليق النوعي يحافظ على الدقة من دون إجراء تحقق، بينما يوفّر satisfies التحقق والاستدلال الدقيق معًا، وهو الخيار المثالي لكائنات الإعدادات.

type C = { color: string };
const c = { color: "blue" } satisfies C;
const exact: "blue" = c.color;
console.log(exact);

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

هل درس «سبب وجود satisfies» مجاني؟

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

ماذا ستتعلم في «سبب وجود satisfies»؟

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

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

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

كم من الوقت يستغرق درس «سبب وجود satisfies»؟

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

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

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

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

  1. سبب وجود satisfies
  2. satisfies مقابل تعليق النوع
  3. satisfies مقابل تأكيد as
  4. أنماط satisfies العملية
← العودة إلى TypeScript Academy