Menu

TypeScript 7: הקומפיילר ה-native, מה השתנה ואיך משדרגים

TypeScript 7 הוא הקומפיילר של TypeScript שנכתב מחדש ב-Go כתוכנה native: מהיר בערך פי עשרה, עם אותה פקודת tsc ואותה שפה. מה השתנה למשתמשים (ברירות מחדל חדשות, אפשרויות שהוסרו, ה-API החסר ל-JavaScript), אילו כלים עדיין צריכים את TypeScript 6, ואיך משדרגים.

בדף הזה יש עורכים שאפשר להריץ - לערוך, להריץ ולראות את הפלט מיד.

TypeScript 7 הוא הקומפיילר של TypeScript שנכתב מחדש ב-Go ומופץ כתוכנה native. השפה זהה, הפקודה עדיין tsc, וחבילת ה-npm עדיין typescript; מה שמשתנה הוא המהירות (builds מלאים מהירים בערך פי עשרה), סדרה של ברירות מחדל חדשות, והסרת האפשרויות ש-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 points, כמו [...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. בבסיסי קוד גדולים זה אומר builds איטיים, פתיחה איטית של העורך וצריכת זיכרון גבוהה.

Anders Hejlsberg הכריז על ההעברה ל-native ב-11 במרץ 2025, בפוסט בשם "A 10x Faster TypeScript". שם הקוד של בסיס הקוד החדש היה Corsa, ושל זה שב-JavaScript היה Strada. הצוות העביר את הקוד של הקומפיילר הקיים ולא תכנן מחדש את בודק הטיפוסים, ולכן הקומפיילר החדש פועל לפי אותם כללים ומדווח על אותן שגיאות. TypeScript 6.0 (מרץ 2026) היה הגרסה האחרונה של בסיס הקוד ב-JavaScript ושימש כגשר: הוא סימן כמיושן את כל מה ש-TypeScript 7 עתיד להסיר. TypeScript 7.0 הגיע אחריו ב-8 ביולי 2026.

כמה TypeScript 7 מהיר יותר

builds מלאים של פרויקטי קוד פתוח, כפי שפורסמו עם שחרור 7.0:

פרויקטTypeScript 6TypeScript 7האצהזיכרון
VS Code125.7 s10.6 s11.9xמ-5.2 GB ל-4.2 GB
Sentry139.8 s15.7 s8.9xמ-4.9 GB ל-4.6 GB
Bluesky24.3 s2.8 s8.7xמ-1.8 GB ל-1.3 GB
Playwright12.8 s1.47 s8.7xמ-1.0 GB ל-0.9 GB
tldraw11.2 s1.46 s7.7xמ-0.6 GB ל-0.5 GB

ההרצות האלה השתמשו בברירת המחדל של 4 workers לבדיקת טיפוסים. עם --checkers 8 על אותה מכונה, ה-build של VS Code לקח 7.51 s (16.7x) ושל tldraw 1.06 s (10.6x), במחיר של יותר זיכרון.

העורך מרוויח באותה מידה. ה-language service רץ עכשיו כ-language server מסוג native: בבסיס הקוד של 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 מקבלים עכשיו strict null checks, noImplicitAny ואת כל השאר
targetes2025, הגרסה החדשה ביותר לפני esnextהפלט שומר על תחביר מודרני אלא אם מגדירים target ישן יותר
moduleesnextפלט של מודולי ES אלא אם מגדירים nodenext או commonjs
types[]חבילות @types מותקנות כבר לא נטענות אוטומטית: הוסיפו "types": ["node"] (["*"] מחזיר את ההתנהגות הישנה)
rootDir./, התיקייה שמכילה את tsconfig.jsonכש-outDir מוגדר וקובצי המקור נמצאים ב-src, מתקבלת error TS5011 עד שמגדירים "rootDir": "./src"
noUncheckedSideEffectImportstrueimport של תופעת לוואי כמו import "./styles.css" צריך הצהרת מודול (declare module "*.css";), שחבילות הטיפוסים של frameworks בדרך כלל מספקות
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 (השתמשו ב-bundler).
  • 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 לא כולל API יציב ל-JavaScript. require("typescript") מחזיר רק מידע על הגרסה (version ו-versionMajorMinor), ופונקציות הקומפיילר שכלים אחרים קוראים להן (createProgram, ה-language service) לא נמצאות שם; נקודות הכניסה typescript/unstable/* של החבילה הן ניסיוניות ואינן תחליף. הערות הגרסה אומרות שהצוות מצפה ש-TypeScript 7.1 יכלול API חדש ושונה. עד אז, כל מה שמייבא את הקומפיילר כספרייה ממשיך להשתמש ב-TypeScript 6:

  • typescript-eslint (כללי lint שמודעים לטיפוסים)
  • כלי השפה לקובצי Vue, Svelte ו-Astro, בדיקת הטיפוסים של תבניות Angular, ו-MDX
  • ts-node, שקורס בהפעלה כש-TypeScript 7 מותקן

עבורם, TypeScript מפיץ חבילת תאימות, @typescript/typescript6, שמתקינה את TypeScript 6 עם ה-API המלא שלו ופקודה בשם tsc6. עם aliases של npm, בפרויקט אחד יכולים להיות שניהם: TypeScript 7 עושה את ה-builds, וכלים שמייבאים את 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 רגיל ודלגו על זה.

אפשרויות חדשות בשורת הפקודה

הקומפיילר ה-native מפרסר, בודק ומייצר פלט במקביל. שלושה דגלים חדשים שולטים בזה, והערות הגרסה מגדירות את --checkers ואת --builders כניסיוניים:

דגלמה הוא עושה
--checkers Nמספר ה-workers לבדיקת טיפוסים בכל פרויקט (ברירת מחדל 4). יותר יכולים לעזור במכונות עם הרבה ליבות ועולים בזיכרון; פחות מתאימים ל-CI runners קטנים.
--builders Nמספר הפרויקטים שנבנים בו זמנית ב---build של project references. הוא מוכפל ב---checkers: 4 builders עם 4 checkers יכולים להריץ 16 checkers בבת אחת.
--singleThreadedמכבה את כל המקביליות, לדיבאג או למגבלות זיכרון הדוקות.

גם --watch נכתב מחדש, על בסיס העברה ל-Go של ה-file watcher של ה-bundler Parcel.

תמיכה בעורכים

עבור VS Code, צוות TypeScript מפרסם תוסף ייעודי ל-TypeScript 7; אחרי ההתקנה הוא הופך לברירת המחדל, והפקודה "Disable TypeScript 7 Language Server" בלוח הפקודות מחזירה ל-TypeScript 6. הגרסה האחרונה של Visual Studio מפעילה את TypeScript 7 אוטומטית לפי ה-workspace, ועורכים אחרים (Neovim, Zed, Sublime Text, Emacs) מתחברים אליו דרך Language Server Protocol. פרויקטים שמשתמשים בקובצי Vue, Svelte, Astro או MDX, או בתבניות Angular, נשארים עם תמיכת עורך שמבוססת על TypeScript 6 עד ש-TypeScript 7 יחשוף API שהכלים האלה יכולים להשתמש בו. פרויקט Angular עדיין יכול להריץ את tsc של TypeScript 7 לבדיקות מהירות של הפרויקט כולו.

איך משדרגים ל-TypeScript 7

  1. שדרגו קודם ל-TypeScript 6, אם אתם על 5.x: npm install --save-dev typescript@6. תקנו כל שגיאת deprecation שהוא מדווח עליה במקום להשתיק אותה עם "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 או ב-framework עם בדיקת טיפוסים של תבניות, הגדירו את ה-alias של TypeScript 6 שמוצג למעלה.
  6. אמתו את הגרסה עם npx tsc --version, וודאו שה-CI מתקין מה-lockfile המעודכן.

tsgo וגרסאות התצוגה המקדימה

לפני השחרור, הקומפיילר ה-native פורסם כ-@typescript/native-preview, והפקודה שלו הייתה tsgo, כדי שאפשר יהיה לנסות אותו לצד ה-tsc שכתוב ב-JavaScript. מאמרים מ-2025 ומתחילת 2026 מתייחסים ל-tsgo. עם 7.0 השם הזה יצא מהשימוש היומיומי: הקומפיילר ה-native הוא tsc, וה-nightly builds שלו מתפרסמים כ-typescript@next (גרסאות פיתוח של 7.1 כיום).

שאלות נפוצות

מה זה TypeScript 7?

TypeScript 7 הוא הגרסה הראשונה של הקומפיילר של TypeScript שנכתב מחדש ב-Go ומקומפל לתוכנה native, במקום לרוץ כ-JavaScript על Node.js. הוא בודק טיפוסים של אותה שפה עם אותה פקודת tsc, והערות הגרסה מדווחות על builds מלאים מהירים בדרך כלל פי 8 עד 12 מ-TypeScript 6. הוא שוחרר ב-8 ביולי 2026.

האם TypeScript 7 כתוב ב-Go?

כן. הקומפיילר וה-language service הועברו מ-TypeScript ל-Go (שם הקוד של הפרויקט היה Corsa, ושל בסיס הקוד ב-JavaScript היה Strada). עדיין מתקינים אותו מ-npm כחבילה typescript; npm בוחר קובץ הרצה native מוכן מראש למערכת ההפעלה ולמעבד שלכם.

צריך לשנות את הקוד שלי בשביל TypeScript 7?

בדרך כלל לא את הקוד, לפעמים את ההגדרות. TypeScript 7 מסיר אפשרויות ש-6.0 סימן כמיושנות (target: es5, moduleResolution: node, baseUrl, outFile ועוד) ומשנה ברירות מחדל כמו strict: true ו-types: []. קוד שמתקמפל נקי עם TypeScript 6.0, כש-stableTypeOrdering מופעל ובלי ignoreDeprecations, אמור להתקמפל באופן זהה.

מה זה tsgo?

tsgo היה שם הפקודה של גרסאות התצוגה המקדימה של הקומפיילר ה-native, שפורסמו כחבילת ה-npm @typescript/native-preview לפני שחרור 7.0. ב-TypeScript 7 הקומפיילר ה-native הוא פשוט tsc בחבילה typescript, וה-nightly builds מגיעים מ-typescript@next.

האם typescript-eslint עובד עם TypeScript 7?

לא ישירות. TypeScript 7.0 לא כולל API יציב ל-JavaScript, וכלים כמו typescript-eslint, ts-node ובודקי התבניות של Vue, Svelte ו-Angular קוראים ל-API הזה. השאירו את TypeScript 6 מותקן עבורם דרך החבילה @typescript/typescript6 (alias של npm), והשתמשו ב-tsc של TypeScript 7 ל-builds. צוות TypeScript מצפה ש-TypeScript 7.1 יכלול API חדש ושונה.

איור של שפות התכנות ב-Coddy

ללמוד תכנות עם Coddy

להתחיל