Node.js مع TypeScript
ما هو TypeScript
TypeScript هي لغة مفتوحة المصدر تُحافظ عليها وتُطوّرها شركة مايكروسوفت. يحبها ويستخدمها الكثير من مطوري البرامج حول العالم.
في الأساس، هي مجموعة فرعية من JavaScript تضيف إمكانيات جديدة للغة. أبرز إضافة هي تعريفات الأنواع الثابتة، وهو ما لا يتوفر في JavaScript العادي. بفضل الأنواع، من الممكن، على سبيل المثال، تحديد نوع الوسائط التي نتوقعها وما يُرجعه بالضبط في دالاتنا أو الشكل الدقيق للكائن الذي نقوم بإنشائه. TypeScript أداة قوية جدًا وتفتح عالمًا جديدًا من الاحتمالات في مشاريع JavaScript. تجعل كودنا أكثر أمانًا ومتانة عن طريق منع العديد من الأخطاء قبل حتى شحن الكود - فهي تكتشف المشاكل أثناء تطوير الكود وتتكامل بشكل رائع مع محررات الكود مثل Visual Studio Code.
يمكننا التحدث عن فوائد TypeScript الأخرى لاحقًا، دعونا نرى بعض الأمثلة الآن!
أمثلة
ألقِ نظرة على مقتطف الكود هذا ثم يمكننا فكّه معًا:
type User = {
name: string
age: number
}
function isAdult(user: User): boolean {
return user.age >= 18
}
const justine: User = {
name: 'Justine',
age: 23,
}
const isJustineAnAdult: boolean = isAdult(justine)
الجزء الأول (مع كلمة type
) مسؤول عن إعلان نوع الكائن المخصص الذي يمثل المستخدمين. بعد ذلك، نستخدم هذا النوع المُنشأ حديثًا لإنشاء الدالة isAdult
التي تقبل وسيطة واحدة من نوع User
وتُرجع boolean
. بعد ذلك، نقوم بإنشاء justine
، بيانات المثال التي يمكن استخدامها لاستدعاء الدالة المُعرّفة سابقًا. أخيرًا، نقوم بإنشاء متغير جديد يحتوي على معلومات حول ما إذا كانت justine
بالغة.
هناك أشياء إضافية حول هذا المثال يجب أن تعرفها. أولاً، إذا لم نلتزم بالأنواع المُعلنة، فإن TypeScript سيُنبهنا إلى وجود خطأ ما ويمنع سوء الاستخدام. ثانيًا، لا يجب كتابة كل شيء صراحةً - TypeScript ذكي جدًا ويمكنه استنتاج الأنواع لنا. على سبيل المثال، سيكون المتغير isJustineAnAdult
من نوع boolean حتى لو لم نكتبه صراحةً، أو سيكون justine
وسيطة صالحة لدالتنا حتى لو لم نعلن هذا المتغير من نوع User
.
حسنًا، لدينا بعض كود TypeScript. كيف نفعل ذلك الآن؟
أول شيء يجب فعله هو تثبيت TypeScript في مشروعنا:
npm install -D typescript
الآن يمكننا تجميعه إلى JavaScript باستخدام الأمر tsc
في المحطة. دعونا نفعل ذلك!
بافتراض أن ملفنا يسمى example.ts
، سيبدو الأمر كما يلي:
npx tsc example.ts
TIP
npx هنا يمثل Node Package Execute. تسمح لنا هذه الأداة بتشغيل مُجمّع TypeScript دون تثبيته عالميًا.
tsc
هو مُجمّع TypeScript الذي سيأخذ كود TypeScript ويُجمّعه إلى JavaScript. سيؤدي هذا الأمر إلى إنشاء ملف جديد باسم example.js
يمكننا تشغيله باستخدام Node.js. الآن عندما نعرف كيفية تجميع وتشغيل كود TypeScript دعونا نرى إمكانيات منع الأخطاء في TypeScript قيد التنفيذ!
هذه هي الطريقة التي سنُعدّل بها كودنا:
type User = {
name: string
age: number
}
function isAdult(user: User): boolean {
return user.age >= 18
}
const justine: User = {
name: 'Justine',
age: 'Secret!',
}
const isJustineAnAdult: string = isAdult(justine, "I shouldn't be here!")
وهذا ما يجب أن تقوله TypeScript حول هذا:
example.ts:12:5 - error TS2322: Type 'string' is not assignable to type 'number'.
12 age: 'Secret!',
~~~
example.ts:3:5
3 age: number;
~~~
The expected type comes from property 'age' which is declared here on type 'User'
example.ts:15:7 - error TS2322: Type 'boolean' is not assignable to type 'string'.
15 const isJustineAnAdult: string = isAdult(justine, "I shouldn't be here!");
~~~~~~~~~~~~~~~~
example.ts:15:51 - error TS2554: Expected 1 arguments, but got 2.
15 const isJustineAnAdult: string = isAdult(justine, "I shouldn't be here!");
~~~~~~~~~~~~~~~~~~~~~~
Found 3 errors in the same file, starting at: example.ts:12
كما ترى، تمنعنا TypeScript بنجاح من شحن الكود الذي قد يعمل بشكل غير متوقع. هذا رائع!
المزيد عن تايب سكريبت
يوفر تايب سكريبت العديد من الآليات الرائعة الأخرى مثل الواجهات والصفوف وأنواع الأدوات وما إلى ذلك. أيضًا، في المشاريع الأكبر حجمًا، يمكنك إعلان تكوين مُجمِّع تايب سكريبت الخاص بك في ملف منفصل وضبط طريقة عمله بدقة، ومدى صرامته، ومكان تخزين الملفات المُجمعة على سبيل المثال. يمكنك قراءة المزيد حول كل هذه الأشياء الرائعة في مستندات تايب سكريبت الرسمية.
بعض الفوائد الأخرى لتايب سكريبت التي تستحق الذكر هي أنه يمكن تبنيه تدريجيًا، ويساعد على جعل الكود أكثر قابلية للقراءة والفهم، ويسمح للمطورين باستخدام ميزات اللغة الحديثة أثناء شحن الكود لإصدارات Node.js الأقدم.
تشغيل كود تايب سكريبت في Node.js
لا يمكن لـ Node.js تشغيل تايب سكريبت بشكلٍ أصلي. لا يمكنك استدعاء node example.ts
من سطر الأوامر مباشرةً. ولكن هناك ثلاثة حلول لهذه المشكلة:
تجميع تايب سكريبت إلى جافا سكريبت
إذا كنت ترغب في تشغيل كود تايب سكريبت في Node.js، فأنت بحاجة إلى تجميعه إلى جافا سكريبت أولاً. يمكنك القيام بذلك باستخدام مُجمِّع تايب سكريبت tsc
كما هو موضح سابقًا.
إليك مثال صغير:
npx tsc example.ts
node example.js
تشغيل كود تايب سكريبت باستخدام ts-node
يمكنك استخدام ts-node لتشغيل كود تايب سكريبت مباشرةً في Node.js دون الحاجة إلى تجميعه أولاً. لكنه لا يقوم بالتحقق من نوع الكود. لذلك نوصي بالتحقق من نوع الكود أولاً باستخدام tsc
ثم تشغيله باستخدام ts-node
قبل شحنه.
لاستخدام ts-node
، تحتاج إلى تثبيته أولاً:
npm install -D ts-node
ثم يمكنك تشغيل كود تايب سكريبت الخاص بك كالتالي:
npx ts-node example.ts
تشغيل كود تايب سكريبت باستخدام tsx
يمكنك استخدام tsx لتشغيل كود تايب سكريبت مباشرةً في Node.js دون الحاجة إلى تجميعه أولاً. لكنه لا يقوم بالتحقق من نوع الكود. لذلك نوصي بالتحقق من نوع الكود أولاً باستخدام tsc
ثم تشغيله باستخدام tsx
قبل شحنه.
لاستخدام tsx، تحتاج إلى تثبيته أولاً:
npm install -D tsx
ثم يمكنك تشغيل كود تايب سكريبت الخاص بك كالتالي:
npx tsx example.ts
إذا كنت ترغب في استخدام tsx
عبر node
، فيمكنك تسجيل tsx
عبر --import
:
node --import=tsx example.ts
TypeScript في عالم Node.js
TypeScript راسخة في عالم Node.js وتستخدمها العديد من الشركات والمشاريع مفتوحة المصدر والأدوات والأطر. بعض الأمثلة البارزة للمشاريع مفتوحة المصدر التي تستخدم TypeScript هي:
- NestJS - إطار عمل قوي ومُزود بكامل الميزات يجعل إنشاء أنظمة قابلة للتطوير وذات بنية جيدة أمرًا سهلاً وممتعًا
- TypeORM - نظام ORM رائع مُتأثر بأدوات معروفة من لغات أخرى مثل Hibernate و Doctrine أو Entity Framework
- Prisma - نظام ORM من الجيل التالي يتميز بنموذج بيانات إعلاني وهجرات مُولدة واستعلامات قاعدة بيانات آمنة من حيث النوع تمامًا
- RxJS - مكتبة مستخدمة على نطاق واسع للبرمجة التفاعلية
- AdonisJS - إطار عمل ويب كامل الميزات مع Node.js
- FoalTs - إطار عمل Nodejs الأنيق
والعديد والعديد من المشاريع الرائعة الأخرى... ربما مشروعك التالي!