TYPE ⊆ SET منهج TypeScriptمن الجذورنظرية مجموعات tsc --noEmit ✓
منهج مكتفٍ ذاتياً ١٠ أقاليم · ٣ مخرجات strict: true

النوع is a مجموعة.

منهجٌ يُدرَّس من الجذور. لا تُحفظ هنا قواعد؛ تُشتَقّ. نقرأ نظام أنواع TypeScript كما هو حقاً: نظرية مجموعات ومُبرهِن نظريات صغير، يبرهن عن عالمٍ يختفي قبل أن يعمل البرنامج. كل غرابة ستراها — تتساقط من جملةٍ واحدة.

قبل أن تبدأ

هذا المنهج يفترض أنك تعرف C (المؤشرات، الذاكرة، الأنواع الثابتة) وPython (الديناميكية، duck typing)، ومعك أساسيات JavaScript. سنربط كل فكرة بالفرق التصميمي عن هذه اللغات. شغّل دائماً في الوضع الصارم "strict": true — بدونه تدرس نظاماً آخر مشوَّهاً.

القاعدة الذهبية الوحيدة

احفظ هذه إن نسيت كل شيء

حين يرفض المترجم شيئاً، لا تسأل «كيف أُسكِته؟» — اسأل «أي ادّعاءٍ رياضي يقول إنه كاذب؟». المترجم لا يزعجك؛ هو يبرهن. مهمتك أن تفهم البرهان.

الخريطة

الخريطة لا تُكشف كاملة. تنمو عندنا شجرتان بالتوازي — «الأنواع كمجموعات» و«القيم وقت التشغيل» — تبدوان منفصلتين حتى تلتحما فجأة في الإقليم الأخير، حين تكتشف أن الفجوة بينهما هي كل شيء.

[ الإقليم ٠ ] السؤال: ليش أنواع في لغة بلا أنواع؟ │ [ الإقليم ١ ] النوع = مجموعة (العدسة الكبرى) │ ┌─────────────┴─────────────┐ [ الإقليم ٢ ] [ شجرة موازية: ] الشبكة: unknown/never القيم وقت التشغيل │ (تنمو بصمت في الخلفية…) [ ٣ ] جبر المجموعات A | B A & B │ [ ٤ ] التضييق (narrowing) │ [ ٥ ] الأشكال: البنيوية وبطّة Python │ [ ٦ ] الدوال والتباين (يخدع حدْسك) │ [ ٧ ] Generics: أنواع تأكل أنواعاً │ [ ٨ ] البرمجة على الأنواع → Turing-complete │ [ ٩ ] الحواف ◄══ هنا تلتحم الشجرتان ══► القيم وقت التشغيل
بذرة غموض

في مكانٍ ما بالأسفل، ستكتب نوعاً يحسب، ويتفرّع، ويستدعي نفسه تكرارياً. نظام أنواع TypeScript لغة برمجة كاملة بذاتها — مختبئة داخل لغة برمجة. لن نقول لك هذا الآن؛ ستكتشفه بيدك.

الأقاليم

الإقليم 00
السؤال
ليش أنواع في لغة بلا أنواع؟
المشكلة قبل الحل: المقياس، العقد الضمني، وسرّ أن الأنواع تُمحى قبل التشغيل.
المشكلة قبل الحلافتح
الإقليم 01
النوع مجموعة
★ العدسة الكبرى
الإسناد احتواء، subtype هو subset. العدسة التي يُقرأ بها كل شيءٍ تالٍ.
set = typeافتح
الإقليم 02
الشبكة
القمّة، القاع، والغرباء
unknown، never، any، void، null — وليش الوضع الصارم إلزاميّ.
⊤ … ⊥افتح
الإقليم 03
جبر المجموعات
اتحاد، تقاطع، توسيع
| و & والحرفيّات و widening، ولماذا string & number = never.
∪ ∩افتح
الإقليم 04
التضييق
كيف يفكّر المُبرهِن
تحليل التدفّق، discriminated unions، وحارس never للتحقّق من الشمول.
narrowingافتح
الإقليم 05
الأشكال
البنيوية وبطّة Python
الكائنات كمجموعات، duck typing مبرهَن، وفحص الخصائص الزائدة المُربك.
structuralافتح
الإقليم 06
الدوال والتباين
الإقليم الذي يخدع حدْسك
covariance/contravariance والثقب المقصود في المصفوفات — اللاسلامة بحساب.
varianceافتح
الإقليم 07
Generics
أنواع تأكل أنواعاً
الأنواع كدوال، القيود (extends = ⊆)، وحفظ العلاقات بين المدخلات والمخرجات.
<T>افتح
الإقليم 08
البرمجة على الأنواع
conditional / infer / mapped
شرط + تفكيك + حلقة + عودية ⟹ نظام الأنواع لغةٌ مكتملة تورنغ.
type-levelافتح
الإقليم 09
الحواف
حيث ينكسر النظام
اللاسلامة، حدّ التشغيل، استعادة الأنواع الاسمية — والتحام الشجرتين.
the wallافتح

المخرجات المرافقة

تُفتح في نهاية الرحلة، حين تكون الشجرة قد اكتملت بيدك.

كيف تدرس

بالترتيب — كل إقليم يفترض ما قبله. الألغاز ليست اختيارية؛ هي المكان الذي يحدث فيه الفهم. لا تقرأ الحل قبل أن تكافح؛ لن تجد حلولاً جاهزة قريبة من اللغز عمداً. استعمل TS Playground أو tsc --noEmit — جرّب، اكسر، واقرأ رسالة الخطأ كناتجٍ للمُبرهِن لا كعقوبة.

منهج TypeScript — من الجذور · نظرية مجموعات + مُبرهِن نظريات ابدأ من الإقليم ٠