Menu
flag Ar iconالعربيةdown icon

TypeScript 7: المترجم الأصلي، ما الذي تغيّر وكيف تترقى

TypeScript 7 هو مترجم TypeScript بعد إعادة كتابته بلغة Go كبرنامج أصلي: أسرع بنحو عشر مرات، بالأمر tsc نفسه واللغة نفسها. ما الذي تغيّر للمستخدمين (قيم افتراضية جديدة، وخيارات محذوفة، وغياب واجهة JavaScript البرمجية)، وما الأدوات التي ما زالت تحتاج إلى TypeScript 6، وكيف تترقى.

تحتوي هذه الصفحة على محررات قابلة للتشغيل - حرّر، شغّل، وشاهد النتيجة فوراً.

TypeScript 7 هو مترجم TypeScript بعد إعادة كتابته بلغة Go وشحنه كبرنامج أصلي. اللغة هي نفسها، والأمر ما زال tsc، وحزمة npm ما زالت typescript؛ ما يتغير هو السرعة (البناء الكامل أسرع بنحو عشر مرات)، ومجموعة من القيم الافتراضية الجديدة، وحذف الخيارات التي أهملها TypeScript 6. صدر TypeScript 7.0 في 8 يوليو 2026، والإصدار الموجود على npm هو 7.0.2.

npm install --save-dev typescript@latest
npx tsc --version
Version 7.0.2

ومن الفروق القليلة التي يمكنك رؤيتها على مستوى الأنواع طريقة تقسيم template literal types للنصوص. يخزّن JavaScript النصوص على هيئة وحدات ترميز UTF-16، والرمز التعبيري مثل 😀 يشغل وحدتين منها:

كان TypeScript 6 يقسم template literal types حسب وحدة الترميز، مثل text[0]. أما TypeScript 7 فيقسمها حسب نقطة الترميز (code point)، مثل [...text]، فيبقى الرمز التعبيري كاملًا:

type HeadTail<S> = S extends `${infer Head}${infer Tail}` ? [Head, Tail] : never;

type Result = HeadTail<"😀abc">;
// TypeScript 7: ["😀", "abc"]
// TypeScript 6: ["\ud83d", "\ude00abc"]

لماذا أُعيدت كتابة TypeScript بلغة Go

حتى الإصدار 6 كان مترجم TypeScript نفسه مكتوبًا بـ TypeScript ويعمل على Node.js. في قواعد الكود الكبيرة كان ذلك يعني بناءً بطيئًا، وبدءًا بطيئًا للمحرر، واستهلاكًا عاليًا للذاكرة.

أعلن Anders Hejlsberg عن النقل الأصلي في 11 مارس 2025، في منشور عنوانه «A 10x Faster TypeScript». كان الاسم الرمزي لقاعدة الكود الجديدة Corsa، ولقاعدة JavaScript القديمة Strada. نقل الفريق كود المترجم الموجود بدل إعادة تصميم فاحص الأنواع، لذلك يتبع المترجم الجديد القواعد نفسها ويبلّغ عن الأخطاء نفسها. كان TypeScript 6.0 (مارس 2026) آخر إصدار من قاعدة كود JavaScript، وكان جسرًا: أهمل كل ما سيحذفه TypeScript 7. ثم صدر TypeScript 7.0 في 8 يوليو 2026.

كم يبلغ تسارع TypeScript 7

البناء الكامل لمشاريع مفتوحة المصدر، كما نُشر مع إصدار 7.0:

المشروعTypeScript 6TypeScript 7التسارعالذاكرة
VS Code125.7 ث10.6 ث11.9xمن 5.2 GB إلى 4.2 GB
Sentry139.8 ث15.7 ث8.9xمن 4.9 GB إلى 4.6 GB
Bluesky24.3 ث2.8 ث8.7xمن 1.8 GB إلى 1.3 GB
Playwright12.8 ث1.47 ث8.7xمن 1.0 GB إلى 0.9 GB
tldraw11.2 ث1.46 ث7.7xمن 0.6 GB إلى 0.5 GB

استخدمت هذه التشغيلات القيمة الافتراضية وهي 4 عمال لفحص الأنواع. ومع --checkers 8 على الجهاز نفسه، استغرق بناء VS Code مدة 7.51 ث (16.7x) وtldraw مدة 1.06 ث (10.6x)، على حساب ذاكرة أكبر.

والمكسب في المحرر بالقدر نفسه. تعمل خدمة اللغة الآن كخادم لغة أصلي: في قاعدة كود VS Code انخفض الوقت من فتح المحرر إلى رؤية أول خطأ في ملف من نحو 17.5 ثانية إلى أقل من 1.3 ثانية. يكون التسارع أهم ما يكون في المستودعات الأحادية (monorepos) وخطوط CI والمحررات على قواعد الكود الكبيرة.

ما الذي بقي كما هو

  • الأمر والحزمة. npm install --save-dev typescript وnpx tsc. عند التثبيت يختار npm ملفًا تنفيذيًا جاهزًا لمنصتك من الاعتماديات الاختيارية مثل @typescript/typescript-linux-x64، فلا حاجة إلى أي إعداد آخر.
  • اللغة. الصياغة نفسها، ونظام الأنواع نفسه، ورموز الأخطاء نفسها.
  • النتائج. تذكر ملاحظات الإصدار أن أي كود تقريبًا يُترجم دون أخطاء في TypeScript 6.0، مع تفعيل الخيار stableTypeOrdering ودون أي إعداد ignoreDeprecations، يُفترض أن يُترجم بالنتيجة نفسها في TypeScript 7.0.

القيم الافتراضية الجديدة

غيّر TypeScript 6.0 هذه القيم الافتراضية وأبقاها TypeScript 7. لا تهم إلا في الخيارات التي لا يضبطها ملف tsconfig.json لديك:

الخيارالقيمة الافتراضية الجديدةالأثر إذا كنت تعتمد على القيمة القديمة
stricttrueالمشاريع التي لم تضبط strict قط تحصل الآن على فحوص null الصارمة وnoImplicitAny وبقية الفحوص
targetes2025، أحدث إصدار قبل esnextيحتفظ الناتج بالصياغة الحديثة ما لم تضبط هدفًا أقدم
moduleesnextناتج بوحدات ES ما لم تضبط nodenext أو commonjs
types[]لم تعد حزم @types المثبتة تُحمَّل تلقائيًا: أضف "types": ["node"] (القيمة ["*"] تعيد السلوك القديم)
rootDir./، المجلد الذي يحتوي على tsconfig.jsonمع ضبط outDir ووجود المصادر في src، يظهر error TS5011 حتى تضبط "rootDir": "./src"
noUncheckedSideEffectImportstrueالاستيراد لأجل الأثر الجانبي مثل import "./styles.css" يحتاج إلى تعريف وحدة (declare module "*.css";)، وعادة توفره حزم أنواع أطر العمل
stableTypeOrderingمفعّل دائمًا ولا يمكن تعطيلهتُرتَّب الأنواع بالطريقة نفسها في كل تشغيل، فلا تعتمد رسائل الأخطاء وناتج .d.ts على ترتيب الفحص

الخيارات والصياغة المحذوفة

الخيارات التي أهملها TypeScript 6 أصبحت أخطاء في TypeScript 7:

  • target: es5، وdownlevelIteration الذي لم يكن موجودًا إلا لناتج ES5.
  • moduleResolution: node (ويُسمى أيضًا node10) وclassic. استخدم nodenext أو bundler.
  • module: amd وumd وsystem وnone.
  • baseUrl (اكتب paths نسبةً إلى ملف tsconfig) وoutFile (استخدم أداة تجميع).
  • esModuleInterop: false وallowSyntheticDefaultImports: false وalwaysStrict: false؛ الثلاثة مفعّلة دائمًا.

يخبرك المترجم بالضبط بما يجب حذفه:

error TS5102: Option 'baseUrl' has been removed. Please remove it from your configuration.
error TS5108: Option 'moduleResolution=node10' has been removed. Please remove it from your configuration.

وهناك صيغتان قديمتان أصبحتا خطأ أيضًا: module Foo { } لتعريف namespace (اكتب namespace Foo { }؛ أما declare module "foo" لحزمة فلا يتأثر)، وimport assertions (assert { type: "json" } تصبح with { type: "json" }).

index.ts(2,8): error TS1540: A 'namespace' declaration should not be declared using the 'module' keyword. Please use the 'namespace' keyword instead.

تغيير module إلى namespace في السطر 2 يصلح الخطأ، فيطبع البرنامج 4.

في سطر الأوامر، أصبح tsc file.ts في مجلد فيه tsconfig.json يتوقف بالخطأ error TS5112 بدل تجاهل الإعداد بصمت. شغّل tsc وحده، أو مرّر --ignoreConfig. وفي ملفات JavaScript المفحوصة عبر JSDoc، يقرأ TypeScript 7 الأنواع بطريقة أقرب إلى TypeScript: لم يعد @enum معروفًا، والقيمة المستخدمة كنوع تحتاج إلى typeof. تعرض صفحة tsconfig البديل لكل خيار محذوف.

أدوات ما زالت تحتاج إلى TypeScript 6

لا يشحن TypeScript 7.0 واجهة JavaScript برمجية مستقرة. يعيد require("typescript") معلومات الإصدار فقط (version وversionMajorMinor)، ودوال المترجم التي تستدعيها الأدوات الأخرى (createProgram وخدمة اللغة) غير موجودة؛ ونقاط الدخول typescript/unstable/* في الحزمة تجريبية وليست بديلًا. تذكر ملاحظات الإصدار أن الفريق يتوقع أن يشحن TypeScript 7.1 واجهة برمجية جديدة ومختلفة. وحتى ذلك الحين، كل ما يستورد المترجم كمكتبة يستمر في استخدام TypeScript 6:

  • typescript-eslint (قواعد الفحص التي تعتمد على الأنواع)
  • أدوات اللغة لملفات Vue وSvelte وAstro، وفحص أنواع القوالب في Angular، وMDX
  • ts-node، الذي ينهار عند البدء مع تثبيت TypeScript 7

لهذه الأدوات يشحن TypeScript حزمة توافق هي @typescript/typescript6، تثبّت TypeScript 6 مع واجهته البرمجية الكاملة والأمر tsc6. وباستخدام الأسماء المستعارة في npm يمكن لمشروع واحد أن يضم الاثنين: TypeScript 7 يتولى البناء، والأدوات التي تستورد typescript تحصل على الإصدار 6.

{
    "devDependencies": {
        "@typescript/native": "npm:typescript@^7.0.2",
        "typescript": "npm:@typescript/typescript6@^6.0.2"
    }
}

بعد npm install:

$ npx tsc --version
Version 7.0.2
$ npx tsc6 --version
Version 6.0.3

إذا لم تكن تستخدم أيًا من هذه الأدوات، فثبّت typescript العادية وتجاوز هذا القسم.

خيارات سطر الأوامر الجديدة

يحلل المترجم الأصلي الكود ويفحصه ويخرجه بالتوازي. تتحكم في ذلك ثلاثة خيارات جديدة، وتصف ملاحظات الإصدار --checkers و--builders بأنهما تجريبيان:

الخياروظيفته
--checkers Nعدد عمال فحص الأنواع لكل مشروع (الافتراضي 4). زيادتهم قد تفيد على الأجهزة كثيرة الأنوية وتكلف ذاكرة؛ وتقليلهم يناسب أجهزة CI الصغيرة.
--builders Nعدد المشاريع التي تُبنى في الوقت نفسه في --build لمراجع المشاريع. يتضاعف مع --checkers: 4 بنّائين مع 4 فاحصين يمكن أن يشغّلوا 16 فاحصًا في آن واحد.
--singleThreadedيعطّل كل التوازي، للتصحيح أو عند حدود ذاكرة ضيقة.

وأُعيدت كتابة --watch أيضًا، اعتمادًا على نقل إلى Go لمراقب الملفات من أداة التجميع Parcel.

دعم المحررات

ينشر فريق TypeScript لـ VS Code إضافة مخصصة لـ TypeScript 7؛ بعد تثبيتها تصبح الافتراضية، والأمر «Disable TypeScript 7 Language Server» في لوحة الأوامر يعيدك إلى TypeScript 6. يفعّل أحدث إصدار من Visual Studio لغة TypeScript 7 تلقائيًا بحسب مساحة العمل، وتتصل المحررات الأخرى (Neovim وZed وSublime Text وEmacs) بها عبر Language Server Protocol. المشاريع التي تستخدم ملفات Vue أو Svelte أو Astro أو MDX، أو قوالب Angular، تبقى على دعم المحرر المبني على TypeScript 6 حتى يكشف TypeScript 7 واجهة برمجية تستطيع هذه الأدوات استخدامها. ويظل بإمكان مشروع Angular تشغيل tsc من TypeScript 7 لفحص سريع للمشروع كله.

كيف تترقى إلى TypeScript 7

  1. ترقَّ إلى TypeScript 6 أولًا إذا كنت على 5.x: npm install --save-dev typescript@6. أصلح كل خطأ إهمال يبلّغ عنه بدل إسكاته بـ "ignoreDeprecations": "6.0".
  2. فعّل "stableTypeOrdering": true تحت TypeScript 6 وأصلح كل ما يغيّره. هذا هو الإعداد الذي يقول الفريق إنه يُترجم بالنتيجة نفسها في 7.
  3. اضبط الخيارات التي تغيرت قيمها الافتراضية إذا كنت تعتمد على القيم القديمة، مثل "types": ["node"] و"rootDir": "./src".
  4. ثبّت TypeScript 7: npm install --save-dev typescript@latest. احذف stableTypeOrdering بعد ذلك إن شئت؛ فهو مفعّل دائمًا في 7.
  5. افحص أدواتك. إذا كنت تستخدم typescript-eslint أو ts-node أو إطار عمل يفحص أنواع القوالب، فأعدّ الاسم المستعار لـ TypeScript 6 المعروض أعلاه.
  6. تأكد من الإصدار بـ npx tsc --version، وتأكد من أن CI يثبّت من ملف القفل المحدَّث.

tsgo والنسخ التجريبية

قبل الإصدار، نُشر المترجم الأصلي باسم @typescript/native-preview، وكان أمره tsgo، حتى يمكن تجربته بجانب tsc المكتوب بـ JavaScript. المقالات من 2025 وأوائل 2026 تشير إلى tsgo. ومع 7.0 خرج هذا الاسم من الاستخدام اليومي: المترجم الأصلي هو tsc، ونسخه الليلية تُنشر باسم typescript@next (إصدارات تطوير 7.1 حاليًا).

الأسئلة الشائعة

ما هو TypeScript 7؟

TypeScript 7 هو أول إصدار من مترجم TypeScript بعد إعادة كتابته بلغة Go وترجمته إلى برنامج أصلي، بدل أن يعمل كـ JavaScript على Node.js. يفحص أنواع اللغة نفسها بالأمر tsc نفسه، وتذكر ملاحظات الإصدار أن البناء الكامل أسرع عادة من 8 إلى 12 مرة مقارنة بـ TypeScript 6. صدر في 8 يوليو 2026.

هل TypeScript 7 مكتوب بلغة Go؟

نعم. نُقل المترجم وخدمة اللغة من TypeScript إلى Go (كان الاسم الرمزي للمشروع Corsa، ولقاعدة كود JavaScript القديمة Strada). ما زلت تثبّته من npm كحزمة typescript؛ ويختار npm ملفًا تنفيذيًا أصليًا جاهزًا لنظام التشغيل والمعالج لديك.

هل أحتاج إلى تغيير الكود من أجل TypeScript 7؟

في الغالب لا يتغير الكود، وأحيانًا يتغير الإعداد. يحذف TypeScript 7 الخيارات التي أهملها الإصدار 6.0 (target: es5 وmoduleResolution: node وbaseUrl وoutFile وغيرها) ويغيّر قيمًا افتراضية مثل strict: true وtypes: []. الكود الذي يُترجم دون أخطاء في TypeScript 6.0، مع تفعيل stableTypeOrdering ودون ignoreDeprecations، يُفترض أن يُترجم بالنتيجة نفسها.

ما هو tsgo؟

كان tsgo اسم أمر النسخ التجريبية من المترجم الأصلي، التي نُشرت كحزمة npm باسم @typescript/native-preview قبل إصدار 7.0. في TypeScript 7 أصبح المترجم الأصلي ببساطة tsc في حزمة typescript، والنسخ الليلية تأتي من typescript@next.

هل يعمل typescript-eslint مع TypeScript 7؟

ليس مباشرة. لا يشحن TypeScript 7.0 واجهة JavaScript برمجية مستقرة، وأدوات مثل typescript-eslint وts-node وفاحصات القوالب في Vue وSvelte وAngular تستدعي تلك الواجهة. أبقِ TypeScript 6 مثبتًا لها عبر الحزمة @typescript/typescript6 (اسم مستعار في npm)، واستخدم tsc من TypeScript 7 للبناء. ويتوقع فريق TypeScript أن يشحن TypeScript 7.1 واجهة برمجية جديدة ومختلفة.

Coddy programming languages illustration

تعلّم البرمجة مع Coddy

ابدأ الآن