دوال التنبؤ والعامل satisfies
اكتب حواجز أنواع مخصصة بأنواع إرجاع تنبؤية، وتحقق من الكائنات باستخدام العامل satisfies دون توسيع النوع.
دوال التنبؤ والعامل satisfies درس مجاني في TypeScript Academy على CoddyKit. هذا هو الدرس 2 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في TypeScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة TypeScript Academy 3 دروس في المجموع.
مقدمة
الهدف: إنشاء دوال predicate تضيق الأنواع (مثل value is T)، واستخدام satisfies للتحقق من البنى دون توسيعها.
- حواجز مخصصة = عمليات فحص قابلة لإعادة الاستخدام وقت التشغيل
satisfies= فحص بنية أثناء الترجمة، مع الحفاظ على القيم الحرفية
أساسيات Predicate
تعيد دالة predicate القيمة x is Type. وبعد الفحص، يُضيَّق نوع المتغير ضمن ذلك النطاق.
function isNumber(x: unknown): x is number {
return typeof x === "number"
}
function demo(a: unknown) {
if (isNumber(a)) {
// inside: a is number
return a.toFixed(2)
}
return "not a number"
}حارس البنية
يفحص الحارس بنية الكائنات؛ وإذا نجح الفحص، يُضيَّق نوعها إلى User ويمكن استخدامها بأمان.
type User = { id: number; name: string }
function isUser(v: unknown): v is User {
return typeof v === "object" && v !== null &&
"id" in v && "name" in v &&
typeof (v as any).id === "number" &&
typeof (v as any).name === "string"
}
function printUser(u: unknown) {
if (isUser(u)) {
console.log(u.name.toUpperCase())
} else {
console.log("invalid user")
}
}عبر الحدود
تضمن الحواجز النقل الآمن عبر حدود الدوال: يكون النوع unknown خارجها، وUser مضبوطًا داخلها.
function fetchAndPrint(json: string) {
const value: unknown = JSON.parse(json)
if (isUser(value)) {
// value narrowed to User
console.log(`User #${value.id}: ${value.name}`)
} else {
console.log("Bad payload")
}
}satisfies (config)
يتحقق satisfies من توافق التعبير مع Confige، لكنه يحافظ على النوع الحرفي للمتغير.
type Config = { mode: "dev" | "prod"; retries: number }
const cfg = {
mode: "prod",
retries: 3,
// timeout: 1000, // Error with satisfies if not in type
} satisfies Config
// cfg.mode is still the literal "prod" (not widened to string)
// and adding unknown keys raises an error at compile-timesatisfies (المصفوفات)
في المصفوفات، يُتحقق من بنى العناصر باستخدام as const satisfies؛ وتُحفظ القيم الحرفية، ويتحسن الإكمال التلقائي.
type Route = { path: `/${string}`; method: "GET" | "POST" }
const routes = [
{ path: "/", method: "GET" },
{ path: "/login", method: "POST" }
] as const satisfies ReadonlyArray<Route>
// each element is checked against Route, literals preserved for DXالتحقق من satisfies
تحقق سريع: ماذا يفعل satisfies فعليًا؟
مراجعة
مراجعة: تُشكّل Predicates (x is T) عقودًا؛ ويؤكد satisfies البنية ويحافظ على الأنواع الحرفية. استخدمهما معًا.
الأسئلة الشائعة
هل درس «دوال التنبؤ والعامل satisfies» مجاني؟
نعم — نص درس «دوال التنبؤ والعامل satisfies» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة TypeScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة TypeScript Academy 3 دروس في المجموع.
ماذا ستتعلم في «دوال التنبؤ والعامل satisfies»؟
اكتب حواجز أنواع مخصصة بأنواع إرجاع تنبؤية، وتحقق من الكائنات باستخدام العامل satisfies دون توسيع النوع. تتمرن على TypeScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ TypeScript Academy؟
لا تُشترط خبرة سابقة. TypeScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 3.
كم من الوقت يستغرق درس «دوال التنبؤ والعامل satisfies»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس TypeScript Academy هذا؟
نعم. كل درس في TypeScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- عبارات switch الشاملة وفحوصات never
- دوال التنبؤ والعامل satisfies
- تنقيح الاتحادات عبر حدود الدوال