عناصر rest في المجموعات وأنواع curry
استخدم عناصر rest في المجموعات لالتقاط قوائم معاملات عشوائية، وأنشئ دوال مساعدة صغيرة لـ curry مع استنتاج الأنواع.
عناصر rest في المجموعات وأنواع curry درس مجاني في TypeScript Academy على CoddyKit. هذا هو الدرس 1 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في TypeScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة TypeScript Academy 3 دروس في المجموع.
مقدمة
الهدف: التقاط قوائم المعاملات باستخدام tuples متغيرة الطول وكتابة مساعد curry صغير لكنه مفيد. وبذلك تبقى واجهات API الخاصة بكم مرنة، مع الحفاظ على أمان الأنواع.
أساسيات tuples متغيرة الطول
نمط [...A, L]: تأتي معاملات البداية أولًا (مجموعة A)، ثم يأتي المعامل الأخير (L). وهذا هو الأساس للمساعدات.
type HeadTail<A extends any[], L> = [...A, L]
function callWithLast<A extends any[], L, R>(fn: (...args: [...A, L]) => R, last: L, ...head: A): R {
return fn(...head, last)
}
// Example
function join3(a: string, b: number, c: boolean) { return `${a}-${b}-${c}` }
const r = callWithLast(join3, true, "x", 42) // ok → stringمساعد curry
curry بسيط: بفضل [...A, L]، يكون كل من نوعي معاملات البداية والمعامل الأخير صحيحًا.
function curryLast<A extends any[], L, R>(fn: (...args: [...A, L]) => R) {
return (last: L) => (...head: A) => fn(...head, last)
}
const curried = curryLast(join3)
const out = curried(true)("x", 42) // stringcurryFromFn عام
حل عام: استنتجوا Tail/Last من Parameters<F>، وبذلك تحافظون على عدد المعاملات وأنواعها.
type Fn = (...args: any[]) => any
type Tail<T extends any[]> = T extends [...infer H, any] ? H : never
type Last<T extends any[]> = T extends [...any[], infer L] ? L : never
function curryFromFn<F extends Fn>(fn: F) {
type A = Tail<Parameters<F>>
type L = Last<Parameters<F>>
return (last: L) => (...head: A) => fn(...head, last)
}
const cur = curryFromFn(join3)
const o2 = cur(true)("x", 42) // still stringالتركيب باستخدام tuples
أنشئوا تدفقًا من A ← B ← C باستخدام compose: تُحفظ معاملات tuple الخاصة بـ A، وتُسلسل أنواع المخرجات.
function compose<A extends any[], B, C>(g: (b: B) => C, f: (...args: A) => B) {
return (...args: A): C => g(f(...args))
}
function len(a: string, b: number) { return `${a}${b}`.length }
function isEven(n: number) { return n % 2 === 0 }
const comp = compose(isEven, len)
const ok = comp("id", 99) // booleanنصائح
نصائح:
تتطلب tuples متغيرة الطول الإصدار TS 4.0+؛ فاحرصوا على تحديث الهدف.
وجّهوا المترجم: يمكن أحيانًا تحسين الاستنتاج بكتابة معاملات النوع صراحةً.
الإفراط في التعقيد يضيف تعقيدًا إلى تصميم واجهة API؛ وتكون المساعدات البسيطة أكثر فاعلية.
التحقق من توقيع curry
تحقق سريع: أي توقيع يلتقط أي معاملات A والمعامل الأخير L لمساعد curry؟
مراجعة
مراجعة: نمذجوا قوائم المعاملات باستخدام [...A, L]؛ واكتبوا مساعدَي curry وcompose صغيرين؛ وستُحفظ الأنواع تلقائيًا.
الأسئلة الشائعة
هل درس «عناصر rest في المجموعات وأنواع curry» مجاني؟
نعم — نص درس «عناصر rest في المجموعات وأنواع curry» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة TypeScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة TypeScript Academy 3 دروس في المجموع.
ماذا ستتعلم في «عناصر rest في المجموعات وأنواع curry»؟
استخدم عناصر rest في المجموعات لالتقاط قوائم معاملات عشوائية، وأنشئ دوال مساعدة صغيرة لـ curry مع استنتاج الأنواع. تتمرن على TypeScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ TypeScript Academy؟
لا تُشترط خبرة سابقة. TypeScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 3.
كم من الوقت يستغرق درس «عناصر rest في المجموعات وأنواع curry»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس TypeScript Academy هذا؟
نعم. كل درس في TypeScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- عناصر rest في المجموعات وأنواع curry
- تركيب الدوال والمعاملات بأمان
- المنشئات ذات الكتابة القوية