AzLearn

تثبيت TypeScript وأول برنامج

Installing TypeScript and First Program

مفهوم ~20 دقيقة

تثبيت TypeScript — Installing TypeScript

قبل كتابة أي كود، تحتاج بيئة عمل. TypeScript لا يعمل مباشرة في المتصفح أو في Node.js؛ هو compiler يحول .ts إلى .js.

المتطلبات: Node.js ≥ 20

  • macOS: ثبّت عبر Homebrew: brew install node
  • Linux: استخدم مدير الحزم مثل apt install nodejs npm أو dnf install nodejs
  • Windows: نزّل المثبت الرسمي من nodejs.org/en/download، أو استخدم WSL (موصى به للمطورين)

تحقق من التثبيت:

node --version    # يجب v20+
npm --version

تثبيت TypeScript

خيار 1 — عالمي (للتجربة السريعة):

npm install -g typescript
tsc --version

خيار 2 — لكل مشروع (الموصى به):

mkdir my-project && cd my-project
npm init -y
npm install -D typescript @types/node

تشغيل ملف TypeScript مباشرة

استخدم tsx — أسرع من ts-node ويدعم TypeScript v5 مع ESM:

npm install -D tsx
npx tsx hello.ts

إنشاء tsconfig.json

في مجلد المشروع:

npx tsc --init

هذا يُنشئ tsconfig.json بالقيم الافتراضية. سنشرح خياراته في الفصل الثامن.

أنواع Node.js

أي درس من الفصل العاشر فصاعداً يحتاج @types/node:

npm install -D @types/node

بدونه لن يعرف TypeScript واجهات process, fs, وغيرها.


أول برنامج — First Program

سنكتب أول برنامج TypeScript بسيطاً لكنه منظم. لا نريد فقط console.log("Hello"); نريد دالة تستقبل قيمة typed وترجع نصاً. هذا يوضح فلسفة TypeScript من البداية: البيانات لها شكل، والدوال لها عقد.

ابدأ باسم واضح. studentName: string يعني أن الاسم نص. الدالة welcome تستقبل النص وترجع نصاً. عندما تقرأ signature قبل جسم الدالة، تفهم استخدامها بدون قراءة التفاصيل. هذه واحدة من أهم فوائد TypeScript: القدرة على فهم الحدود بسرعة.

لا تكتب annotations في كل مكان إذا كان TypeScript يستطيع الاستنتاج. لكن في الدوال العامة، من الجيد توضيح أنواع المعاملات والقيمة المرجعة لأنها تمثل عقداً مع بقية الكود.

البرنامج الكامل

index.ts

لاحظ أن message لم نكتب نوعه. TypeScript يستنتج أنه string لأن welcome ترجع string. هذا توازن جيد: نكتب النوع عند الحدود، ونترك الاستنتاج يعمل داخل التنفيذ.

أخطاء شائعة

أول خطأ هو استخدام any مبكراً للهروب من compiler. هذا يلغي قيمة TypeScript. الخطأ الثاني هو كتابة أنواع غير دقيقة مثل object لكل شيء. الأفضل أن تصف الخصائص التي تحتاجها فعلاً. الخطأ الثالث هو الخلط بين فحص الأنواع وفحص البيانات الخارجية؛ سنعود له لاحقاً.

تحدي — Challenge