satisfies مقابل تأكيد as
تعرّفوا إلى سبب أمان satisfies أكثر من التحويل باستخدام as
satisfies مقابل تأكيد as درس مجاني في TypeScript Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في TypeScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة TypeScript Academy 4 دروس في المجموع.
ما الذي يفعله as
يخبر تأكيد as المصرّف بأن يثق بك فيما يتعلق بالنوع. فهو لا يتحقق من توافق القيمة فعليًا، بل يتجاوز النوع المستدل عليه ويستبدله.
const value = { color: "red" } as { color: string; size: number };
// No error even though size is missing!
console.log(value.color);يتجاوز as إجراءات الأمان
لأن as يتخطى التحقق، فقد يخفي أخطاء حقيقية. فالكائن أعلاه يفتقد size، ومع ذلك يلتزم TypeScript الصمت.
type Config = { color: string; size: number };
const broken = { color: "red" } as Config;
// broken.size is typed number but is actually undefined at runtime
console.log(broken.size); // undefinedيُجري satisfies التحقق بدلًا من ذلك
يؤدي استبدال as بـ satisfies إلى تحويل ذلك الخطأ الصامت إلى خطأ واضح أثناء الترجمة، لأن الكائن يجب فعلًا أن يطابق النوع.
type Config = { color: string; size: number };
// const c = { color: "red" } satisfies Config; // Error: size missing
const c = { color: "red", size: 10 } satisfies Config;
console.log(c.size);يمكن لـ as فرض أنواع خاطئة
يمكنك حتى تأكيد أنواع غير متوافقة تمامًا باستخدام تأكيد مزدوج، وهذا أمر خطير وينبغي أن يكون نادرًا.
const n = "hello" as unknown as number;
// n is typed number but is actually a string
console.log(typeof n); // "string"لا يقدّم satisfies معلومات خاطئة عن القيم
بخلاف as، لا يمكن استخدام satisfies للادعاء بأن القيمة من نوع غير متوافق. فهو يؤكد فقط أن القيمة تطابق النوع بالفعل.
// const x = "hello" satisfies number; // Error: string not assignable to number
const y = 42 satisfies number;
console.log(y);يفقد as فحوص الخصائص الزائدة
مع as، تمر المفاتيح الإضافية أو المكتوبة بطريقة خاطئة دون اكتشاف. أما satisfies فيواصل الإبلاغ عنها، وبذلك يكتشف الأخطاء الإملائية.
type Config = { mode: string };
const withAs = { mdoe: "dark" } as Config; // typo passes silently
// const withSat = { mdoe: "dark" } satisfies Config; // Error: mdoe
console.log(JSON.stringify(withAs));متى يكون استخدام as مبررًا
لـ as استخدامات صحيحة، مثل تضييق unknown بعد إجراء تحقق أثناء التشغيل، أو التعامل مع DOM. لكن بالنسبة إلى كائنات الإعدادات، يُفضَّل استخدام satisfies.
const data: unknown = JSON.parse("{ }");
// After your own runtime validation, as can express the result.
const obj = data as Record<string, unknown>;
console.log(typeof obj);تفضيل satisfies للإعدادات
في الإعدادات وخرائط المسارات ولوحات الألوان، يوفّر satisfies التحقق والاستدلال الدقيق. أما as فلا يوفّر التحقق ولا الضمان.
type Palette = Record<string, string>;
const safe = { primary: "blue", accent: "gold" } satisfies Palette;
console.log(safe.primary);يختلف as const
لا تخلط بين as const وتأكيد النوع. إذ يعمل as const على تضييق القيم إلى قيم حرفية وجعل العناصر للقراءة فقط؛ وهو آمن، وغالبًا ما يُستخدم مع satisfies.
type Nums = readonly number[];
const xs = [1, 2, 3] as const satisfies Nums;
console.log(xs[0]);ملخص المخاطر
as: يتجاوز المصرّف، ولا يجري التحقق، وقد يخفي الأخطاء. satisfies: يتعاون مع المصرّف، ويجري تحققًا كاملًا، ويحافظ على الاستدلال. اختر satisfies افتراضيًا.
type Config = { level: number };
// const risky = {} as Config; // compiles, level is undefined
const safe = { level: 1 } satisfies Config;
console.log(safe.level);إعادة هيكلة as إلى satisfies
من العادات الجيدة: عندما ترى as SomeObjectType مع قيمة حرفية تتحكم فيها، فجرّب استبداله بـ satisfies وأصلح أي أخطاء تظهر.
type Config = { url: string; retries: number };
// Before: const c = { url: "/api" } as Config;
const c = { url: "/api", retries: 3 } satisfies Config;
console.log(c.url, c.retries);اختبار سريع: satisfies مقابل as
اختبر فهمك للفرق بين satisfies وas.
مراجعة: satisfies مقابل تأكيد as
تعلّمت أن as يتجاوز الفحوص وقد يخفي الأخطاء، بينما يتحقق satisfies من القيمة ويحافظ على الاستدلال الدقيق. يُفضَّل استخدام satisfies مع كائنات الإعدادات التي تتحكم فيها.
type Config = { color: string; size: number };
const c = { color: "red", size: 10 } satisfies Config;
console.log(c.color, c.size);الأسئلة الشائعة
هل درس «satisfies مقابل تأكيد as» مجاني؟
نعم — نص درس «satisfies مقابل تأكيد as» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة TypeScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة TypeScript Academy 4 دروس في المجموع.
ماذا ستتعلم في «satisfies مقابل تأكيد as»؟
تعرّفوا إلى سبب أمان satisfies أكثر من التحويل باستخدام as تتمرن على TypeScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ TypeScript Academy؟
لا تُشترط خبرة سابقة. TypeScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «satisfies مقابل تأكيد as»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس TypeScript Academy هذا؟
نعم. كل درس في TypeScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- سبب وجود satisfies
- satisfies مقابل تعليق النوع
- satisfies مقابل تأكيد as
- أنماط satisfies العملية