0Pricing
TypeScript Academy · درس

حالات استخدام infer العملية: فك تغليف الوعود

فكّوا تغليف أنواع Promise وArray والأغلفة المخصّصة

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

مشكلة فك التغليف

عند العمل مع الشيفرة غير المتزامنة، غالبًا ما تتلقون Promise وتحتاجون إلى T الأساسي. تجعل الكلمة المفتاحية infer عملية الاستخراج هذه قابلة لإعادة الاستخدام.

type Awaited<T> = T extends Promise<infer U> ? U : T;
type A = Awaited<Promise<string>>; // string
type B = Awaited<number>;          // number

أداة Awaited المضمّنة

قدم TypeScript 4.5 النوع المضمّن Awaited، الذي يعالج الوعود المتداخلة بشكل عودي.

type A = Awaited<Promise<Promise<string>>>; // string
// Handles arbitrary nesting automatically

فك التغليف بعمق مخصص

قبل أن تصبح Awaited مضمّنة، كان المطورون يستخدمون أنواعًا عودية مع infer لفك تغليف الوعود.

type DeepAwaited<T> =
  T extends Promise<infer U> ? DeepAwaited<U> : T;
type A = DeepAwaited<Promise<Promise<number>>>; // number

فك تغليف عناصر المصفوفة

يستخرج نمط infer نفسه نوع العنصر من المصفوفة، وهو مكافئ لأسلوب T[number] المضمّن.

type Element<T> = T extends (infer U)[] ? U : never;
type A = Element<string[]>; // string
type B = Element<number[]>; // number

فك تغليف أنواع Observable

بالنسبة إلى Observable في RxJS، يستخرج infer النوع الذي يتم إصداره.

type ObservableType<T> = T extends Observable<infer U> ? U : never;
type A = ObservableType<Observable<User>>; // User

فك تغليف القيمة المعادة للدالة

ادمجوا بين ReturnType وAwaited للحصول على القيمة التي تحل إليها الدالة غير المتزامنة.

async function getUser(): Promise<User> { /* ... */ }
type UserResult = Awaited<ReturnType<typeof getUser>>; // User

فك تغليف الأغلفة المتداخلة

يمكنكم تسلسل infer للتعامل مع الأنواع المغلفة في عدة طبقات، مثل Promise>.

type UnwrapPromiseArray<T> =
  T extends Promise<infer U>
    ? U extends (infer V)[]
      ? V
      : U
    : T;
type A = UnwrapPromiseArray<Promise<User[]>>; // User

فك التغليف الشرطي بناءً على البنية

استخدموا infer لفك تغليف أنواع معينة فقط بشكل شرطي، مع ترك الأنواع الأخرى دون تغيير.

type MaybeUnwrap<T> =
  T extends Promise<infer U> ? U : T extends (infer V)[] ? V : T;

type A = MaybeUnwrap<Promise<string>>;  // string
type B = MaybeUnwrap<number[]>;         // number
type C = MaybeUnwrap<boolean>;          // boolean

غلاف fetch لواجهة API مقيّدة بالأنواع

يُعد غلاف fetch العام الذي يعيد نوع البيانات التي تم حلها تطبيقًا كلاسيكيًا لفك التغليف باستخدام infer.

async function fetchData<T>(url: string): Promise<T> {
  const res = await fetch(url);
  return res.json() as T;
}
type UserData = Awaited<ReturnType<typeof fetchData<User>>>; // User

فك تغليف آمن من الأخطاء

يتيح نمط Result، عند دمجه مع infer، استخراج نوع النجاح من اتحاد مميّز.

type Ok<T> = { ok: true; value: T };
type Err = { ok: false; error: string };
type ExtractOk<T> = T extends Ok<infer V> ? V : never;
type A = ExtractOk<Ok<number> | Err>; // number

مراجعة سريعة: فك التغليف باستخدام infer

تُعد الكلمة المفتاحية infer أداة متعددة الاستخدامات لاستخراج الأنواع من الأغلفة — الوعود والمصفوفات وObservable وأنواع Result. يتولى Awaited المضمّن فك التغليف غير المتزامن؛ واستخدموا أنواعًا مخصصة للبُنى الأخرى.

اختبار سريع

ما أفضل طريقة للحصول على نوع القيمة التي تحل إليها الدالة غير المتزامنة؟

ما تعلّمتموه

يُعد فك التغليف القائم على infer أداة عملية لشيفرة TypeScript غير المتزامنة. استخدموا Awaited المضمّن مع الوعود، وأنشئوا أنواع فك تغليف مخصصة للمصفوفات وObservable وأنماط Result.

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

هل درس «حالات استخدام infer العملية: فك تغليف الوعود» مجاني؟

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

ماذا ستتعلم في «حالات استخدام infer العملية: فك تغليف الوعود»؟

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

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

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

كم من الوقت يستغرق درس «حالات استخدام infer العملية: فك تغليف الوعود»؟

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

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

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

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

  1. فهم infer في الأنواع الشرطية
  2. بناء ReturnType وParameters من الصفر
  3. أنماط الاستدلال المتداخلة بعمق
  4. حالات استخدام infer العملية: فك تغليف الوعود
← العودة إلى TypeScript Academy