Menu
CoddyTech

أنواع التقاطع (Intersection Types)

جزء من قسم مقدمة إلى Luau في رحلة Lua على Coddy. الدرس 36 من 80.

تعني الأنواع الاتحادية أن القيمة من نوعٍ ما أو من نوعٍ آخر. أما أنواع التقاطع فتشير إلى العكس: تجمع علامة العطف & أشكال الجداول في نوع يتضمن كل الحقول الموجودة في كل جزء:

type HasName = { name: string }
type HasAge = { age: number }

type Person = HasName & HasAge

-- يجب أن يحتوي Person على كلا الحقلين
local user: Person = {
    name = "Alice",
    age = 25,
}

إذا حذفت age، فسيُصدر المدقّق تحذيرًا: التقاطع يعني «و»، وليس اختيار أحدهما دون الآخر. يتيح لك هذا إنشاء أشكال كبيرة من أجزاء صغيرة قابلة لإعادة الاستخدام: عرّف أنواعًا مخصصة لجوانب منفصلة، ثم اجمعها معًا عند الحاجة:

type HasEmail = { email: string }

type Employee = HasName & HasAge & HasEmail

ملاحظة مهمة عن Luau: استخدم التقاطع مع أشكال الجداول (وأنواع الدوال)، لا مع الأنواع البدائية. تعبير مثل number & string لا معنى له، إذ لا يمكن لأي قيمة أن تكون من النوعين معًا. عندما تريد «هذا الشكل بالإضافة إلى ذاك الشكل»، فإن & هي أداتك.

أما وقت التشغيل، فـPerson ليس سوى جدول Lua عادي، بالطبع: لا يوجد التقاطع إلا لدى المدقّق.

challenge icon

التحدي

سهل

ادمج شكلين صغيرين في شكل واحد.

  1. اكتب type HasName = {name: string} وtype HasAge = {age: number} وtype Person = HasName & HasAge.
  2. أنشئ local user: Person = {name = "Omar", age = 31}.
  3. اطبع `Name: {user.name}, Age: {user.age}`.

اضغط على Run Code: يُظهر الناتج Name: Omar, Age: 31.

جرّب بنفسك

-- 1) عرّف النوع HasName والنوع HasAge والنوع Person = HasName & HasAge
-- 2) عرّف المتغير المحلي user: Person = {...}
-- 3) اطبع السطر الذي يحتوي على الاسم والعمر

جميع دروس مقدمة إلى Luau

تدرّب بنفسك: مترجم Luau عبر الإنترنت