TypeScript حزمة npm اسمها typescript. ثبّتها في مشروعك وتحقق من أنها تعمل:
npm install --save-dev typescript
npx tsc --version
Version 7.0.2
توفر الحزمة الأمر tsc، وهو مترجم TypeScript. تحتاج إلى Node.js وnpm (الذي يأتي مع Node.js) لتثبيتها؛ احصل على Node.js من nodejs.org أو من مدير الحزم في نظامك، وتحقق منه بـ node --version.
لا تحتاج إلى تثبيت أي شيء لتجربة TypeScript. هذا المثال يُترجم ويعمل في متصفحك:
تثبيت TypeScript في مشروع
التثبيت الموصى به محلي، كاعتمادية تطوير للمشروع:
mkdir hello-ts
cd hello-ts
npm init -y
npm install --save-dev typescript
يضع npm install --save-dev typescript (صيغته المختصرة npm i -D typescript) المترجم في node_modules ويسجله في package.json:
{
"devDependencies": {
"typescript": "^7.0.2"
}
}
هي اعتمادية تطوير لأنها لازمة لبناء الكود فقط، لا لتشغيله. كل من ينسخ المشروع ويشغّل npm install يحصل على إصدار المترجم نفسه.
لتشغيل المترجم المحلي، اسبقه بـ npx، الذي يبحث عن الأوامر في node_modules/.bin:
npx tsc --version
داخل سكربتات package.json يمكنك كتابة tsc دون npx، لأن npm يضيف node_modules/.bin إلى PATH عند تشغيل السكربتات:
{
"scripts": {
"build": "tsc",
"typecheck": "tsc --noEmit"
}
}
بعدها يترجم npm run build الكود، ويفحص npm run typecheck الأنواع دون كتابة أي ملف.
معرفة إصدار TypeScript
| الأمر | ما الذي يعرضه |
|---|---|
npx tsc --version أو npx tsc -v | المترجم الذي يستخدمه المشروع (التثبيت المحلي أولًا) |
tsc --version | التثبيت العام، إن وُجد |
npm ls typescript | الإصدار المثبت في المشروع، والحزم التي تعتمد عليه |
npm view typescript version | أحدث إصدار مستقر منشور على npm |
npm ls typescript
hello-ts@1.0.0 /home/ana/hello-ts
└── typescript@7.0.2
إذا طبع npx tsc --version وtsc --version إصدارين مختلفين، فللمشروع مترجمه الخاص والمترجم العام أقدم أو أحدث منه. إصدار المشروع هو المهم في بنائه.
تثبيت TypeScript عالميًا
يمنحك التثبيت العام أمر tsc في كل طرفية، دون npx:
npm install -g typescript
tsc --version
على macOS وLinux قد يفشل هذا بأخطاء صلاحيات EACCES عندما يكون Node.js مثبتًا على مستوى النظام. تثبيت Node.js عبر مدير إصدارات مثل nvm أو fnm يتجنب ذلك، ولا يُنصح باستخدام sudo npm install -g.
استخدم الأمر العام للتجارب السريعة. أما في مشروع حقيقي فاحتفظ بتثبيت محلي أيضًا: عندها يسجل package.json الإصدار، ولا يستطيع تحديث المترجم العام تغيير طريقة بناء المشروع.
التثبيت باستخدام pnpm أو Yarn أو Bun
كل مدير حزم JavaScript يثبّت الحزمة نفسها:
pnpm add -D typescript
yarn add -D typescript
bun add -d typescript
شغّل المترجم بـ pnpm tsc أو yarn tsc أو bunx tsc.
إنشاء tsconfig.json باستخدام tsc --init
ملف tsconfig.json يجعل المجلد مشروع TypeScript ويحمل خيارات المترجم. أنشئ واحدًا:
npx tsc --init
Created a new tsconfig.json
You can learn more at https://aka.ms/tsconfig
الملف المُنشأ (في TypeScript 7) يفعّل strict وبعض الفحوص الأخرى، ويستخدم "module": "nodenext" و"target": "esnext"، ويحتوي على أسطر معلّقة لـ rootDir وoutDir. أزل التعليق عن هذين السطرين حتى يقرأ المترجم من src ويكتب إلى dist:
{
"compilerOptions": {
"rootDir": "./src",
"outDir": "./dist",
"module": "nodenext",
"target": "esnext",
"types": [],
"strict": true
}
}
هذا عرض مختصر؛ الملف الحقيقي يحتوي على خيارات أكثر، ولكل منها تعليق. تشرح صفحة tsconfig وظيفتها. وتشغيل npx tsc --init مرة أخرى في المجلد نفسه يفشل بالخطأ error TS5054: A 'tsconfig.json' file is already defined، لذلك لا يستبدل إعداداتك أبدًا.
ترجمة أول ملف
أنشئ src/index.ts:
ثم ترجم وشغّل:
npx tsc
node dist/index.js
Hello, Ada!
Hello, Grace!
Hello, Linus!
يقرأ npx tsc دون وسائط ملف tsconfig.json، ويفحص أنواع كل ملف يتضمنه، ويكتب الناتج في dist. مع الإعدادات المُنشأة تحصل على index.js إضافة إلى index.d.ts (تعريفات الأنواع) وملفات .map (خرائط المصدر) لكل ملف.
أمران يجب معرفتهما عن الناتج:
- أخطاء الأنواع لا توقف الناتج افتراضيًا. يبلّغ
tscعن الأخطاء، وينتهي برمز خروج غير صفري، ومع ذلك يكتب JavaScript. اضبط"noEmitOnError": trueحتى لا يُكتب شيء ما دامت هناك أخطاء. - عند وجود
tsconfig.jsonلا تمرر أسماء ملفات. الأمرnpx tsc src/index.tsيفشل بالخطأerror TS5112: tsconfig.json is present but will not be loaded if files are specified on commandline.شغّلnpx tscوحده، أو أضف--ignoreConfigإذا أردت فعلًا ترجمة ملف واحد بالإعدادات الافتراضية.
وضع المراقبة
يُبقي الخيار --watch (المختصر -w) المترجم يعمل ويعيد الترجمة كلما تغيّر ملف:
npx tsc --watch
06:28:22 AM - Starting compilation in watch mode...
06:28:22 AM - Found 0 errors. Watching for file changes.
اتركه مفتوحًا في طرفية بجانب محررك. أوقفه بـ Ctrl+C.
تثبيت إصدار محدد من TypeScript
أضف الإصدار بعد @:
npm install --save-dev typescript@7.0.2 # an exact version
npm install --save-dev typescript@6 # the newest 6.x
npm install --save-dev typescript@latest # the newest stable release
npm install --save-dev typescript@next # nightly builds of the next version
TypeScript 6 هو آخر إصدار مترجمه مكتوب بـ JavaScript. بعض الأدوات التي تستدعي واجهة JavaScript البرمجية للمترجم ما زالت تحتاج إليه، وهذا ما تغطيه صفحة TypeScript 7 إلى جانب طريقة الترقية.
إعداد المحرر
يدعم VS Code لغة TypeScript بشكل مدمج: افتح ملف .ts فتحصل على خطوط تحت الأخطاء وإكمال تلقائي وعرض الأنواع عند التمرير وإعادة التسمية دون تثبيت أي شيء. وللحصول على سرعة TypeScript 7 في المحرر، ينشر فريق TypeScript إضافة مخصصة تنقل VS Code إلى خادم اللغة الأصلي في TypeScript 7. يدعم WebStorm وبقية بيئات JetBrains لغة TypeScript مباشرة، وتستخدم Neovim وVim وEmacs وZed وSublime Text خادم لغة TypeScript عبر دعمها لـ LSP.
أخطاء التثبيت الشائعة
This is not the tsc command you are looking for. شغّلت npx tsc في مجلد لم تُثبَّت فيه TypeScript، فجلب npx حزمة قديمة يصادف أن اسمها tsc. ثبّت الحزمة الحقيقية بـ npm install --save-dev typescript.
tsc: command not found، أو 'tsc' is not recognized as an internal or external command على Windows. TypeScript غير مثبتة عالميًا، أو مجلد npm العام ليس ضمن PATH. استخدم npx tsc في مشروع فيه تثبيت محلي، أو ثبّتها عالميًا وافتح طرفية جديدة.
error TS2591: Cannot find name 'process' (أو require؛ أما __dirname فيعطي TS2304). أنواع واجهات Node.js البرمجية موجودة في حزمة منفصلة. ثبّتها بـ npm install --save-dev @types/node، ثم أضف "types": ["node"] إلى compilerOptions: لم تعد TypeScript 7 تحمّل كل حزم @types المثبتة تلقائيًا.
error TS5011: The common source directory of 'tsconfig.json' is './src'. ملفاتك في src وضبطت outDir دون rootDir. أضف "rootDir": "./src".
error TS1295: ECMAScript imports and exports cannot be written in a CommonJS file under 'verbatimModuleSyntax'. يكتب npm init -y القيمة "type": "commonjs" في package.json، فيعامل إعداد tsc --init ("module": "nodenext" مع verbatimModuleSyntax) كل ملف .ts على أنه CommonJS، حيث لا يُسمح بـ import وexport. غيّرها إلى "type": "module"، واكتب الاستيرادات النسبية بامتداد .js: import { add } from "./math.js".
الأسئلة الشائعة
كيف أثبّت TypeScript؟
ثبّت Node.js، ثم شغّل npm install --save-dev typescript في مجلد المشروع. يضيف ذلك المترجم إلى node_modules وإلى devDependencies في package.json. شغّله بـ npx tsc. وإذا أردت أمر tsc متاحًا على مستوى الجهاز كله، فاستخدم npm install -g typescript بدلًا من ذلك.
كيف أعرف إصدار TypeScript المثبت؟
شغّل npx tsc --version (أو npx tsc -v) في مجلد المشروع. يطبع شيئًا مثل Version 7.0.2. أما tsc --version دون npx فيعرض إصدار التثبيت العام إن وُجد، ويعرض npm ls typescript الإصدار الذي استقرت عليه اعتماديات مشروعك.
كيف أبدأ مشروع TypeScript جديدًا؟
شغّل npm init -y ثم npm install --save-dev typescript ثم npx tsc --init. يكتب الأمر الأخير ملف tsconfig.json بإعدادات موصى بها. ضع الكود في src، واضبط rootDir على ./src وoutDir على ./dist، ثم شغّل npx tsc للترجمة وnode dist/index.js لتشغيل الناتج.
هل أثبّت TypeScript عالميًا أم محليًا؟
محليًا، كاعتمادية تطوير. بذلك يثبّت كل مشروع إصدار المترجم الخاص به في package.json، ويحصل زملاؤك وCI على الإصدار نفسه من npm install. التثبيت العام مفيد للتجارب السريعة، لكنه قد يختلف عن الإصدار الذي يتوقعه المشروع.
لماذا يقول npx tsc "This is not the tsc command you are looking for"؟
لأن TypeScript غير مثبتة في ذلك المجلد، فنزّل npx حزمة npm قديمة غير ذات صلة اسمها tsc، لا تفعل سوى طباعة هذا التحذير. اسم حزمة المترجم هو typescript. شغّل npm install --save-dev typescript أولًا، وبعدها يجد npx tsc الأمر الصحيح.