Node.js مع TypeScript
ما هو TypeScript
TypeScript هي لغة مفتوحة المصدر يتم صيانتها وتطويرها بواسطة Microsoft. إنها محبوبة وتستخدم من قبل الكثير من مطوري البرامج في جميع أنحاء العالم.
بشكل أساسي، هي مجموعة شاملة من 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.tsTIP
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 بنجاح من شحن التعليمات البرمجية التي قد تعمل بشكل غير متوقع. هذا رائع!
المزيد عن TypeScript
تقدم TypeScript مجموعة كبيرة من الآليات الرائعة الأخرى مثل الواجهات والفئات وأنواع الأدوات المساعدة وما إلى ذلك. أيضًا، في المشاريع الأكبر حجمًا، يمكنك الإعلان عن تكوين محول TypeScript الخاص بك في ملف منفصل وتعديل كيفية عمله بدقة ومدى دقته والمكان الذي يخزن فيه الملفات المترجمة على سبيل المثال. يمكنك قراءة المزيد عن كل هذه الأشياء الرائعة في وثائق TypeScript الرسمية.
بعض الفوائد الأخرى لـ TypeScript التي تستحق الذكر هي أنه يمكن اعتمادها تدريجيًا، فهي تساعد في جعل التعليمات البرمجية أكثر قابلية للقراءة والفهم وتسمح للمطورين باستخدام ميزات اللغة الحديثة أثناء شحن التعليمات البرمجية لإصدارات Node.js الأقدم.
تشغيل كود TypeScript في Node.js
لا يمكن لـ Node.js تشغيل TypeScript أصليًا. لا يمكنك استدعاء node example.ts من سطر الأوامر مباشرةً. ولكن هناك ثلاثة حلول لهذه المشكلة:
تجميع TypeScript إلى JavaScript
إذا كنت ترغب في تشغيل كود TypeScript في Node.js، فأنت بحاجة إلى تجميعه إلى JavaScript أولاً. يمكنك القيام بذلك باستخدام محول TypeScript tsc كما هو موضح سابقًا.
إليك مثال صغير:
npx tsc example.ts
node example.jsتشغيل كود TypeScript باستخدام ts-node
يمكنك استخدام ts-node لتشغيل كود TypeScript مباشرةً في Node.js دون الحاجة إلى تجميعه أولاً. لكنه لا يتحقق من نوع التعليمات البرمجية الخاصة بك. لذلك نوصي بالتحقق من نوع التعليمات البرمجية الخاصة بك أولاً باستخدام tsc ثم تشغيلها باستخدام ts-node قبل شحنها.
لاستخدام ts-node، تحتاج إلى تثبيته أولاً:
npm install -D ts-nodeثم يمكنك تشغيل كود TypeScript الخاص بك هكذا:
npx ts-node example.tsتشغيل كود TypeScript باستخدام tsx
يمكنك استخدام tsx لتشغيل كود TypeScript مباشرةً في Node.js دون الحاجة إلى تجميعه أولاً. لكنه لا يتحقق من نوع التعليمات البرمجية الخاصة بك. لذلك نوصي بالتحقق من نوع التعليمات البرمجية الخاصة بك أولاً باستخدام tsc ثم تشغيلها باستخدام tsx قبل شحنها.
لاستخدام tsx، تحتاج إلى تثبيته أولاً:
npm install -D tsxثم يمكنك تشغيل كود TypeScript الخاص بك هكذا:
npx tsx example.tsإذا كنت ترغب في استخدام tsx عبر node، يمكنك تسجيل tsx عبر --import:
node --import=tsx example.tsTypeScript في عالم Node.js
لقد ترسخت TypeScript في عالم Node.js وتستخدمها العديد من الشركات والمشاريع مفتوحة المصدر والأدوات والأطر. بعض الأمثلة البارزة للمشاريع مفتوحة المصدر التي تستخدم TypeScript هي:
- NestJS - إطار عمل قوي وكامل الميزات يجعل إنشاء أنظمة قابلة للتطوير ومصممة بشكل جيد أمرًا سهلاً وممتعًا
- TypeORM - ORM رائع متأثر بأدوات أخرى معروفة من لغات أخرى مثل Hibernate أو Doctrine أو Entity Framework
- Prisma - ORM من الجيل التالي يتميز بنموذج بيانات تعريفي وترحيلات تم إنشاؤها واستعلامات قاعدة بيانات آمنة تمامًا من حيث النوع
- RxJS - مكتبة مستخدمة على نطاق واسع للبرمجة التفاعلية
- AdonisJS - إطار عمل ويب كامل الميزات مع Node.js
- FoalTs - إطار عمل Nodejs الأنيق
والعديد والعديد من المشاريع الرائعة الأخرى... ربما حتى مشروعك القادم!