- TypeScript 6.0 是 JavaScript 編譯器的最後一個主要版本,它為即將推出的基於 Go 的原生 TypeScript 7.0 的專案做好了準備。
- 此次更新收緊了預設設定(嚴格模式、現代 ES 目標、ESM 模組),新增了新的平台 API,並引入了穩定的類型排序標誌。
- 許多舊版選項和模組格式(ES5、AMD/UMD/SystemJS、baseUrl、經典解析度)在 7.0 版本完全移除之前就已經被棄用。
- Go 重寫後的效能提升有望帶來約 7-10 倍的建置速度提升、更低的記憶體使用率以及對大型程式碼庫更靈敏的編輯器工具。
TypeScript 6.0 的版本比較特殊:沒有更多的單獨迭代,而是在 JavaScript 中建構了實際的編譯器, el Mismo que viene evolucionando des de los primeros días del proyecto.現在,我們將重點關注 TypeScript 7.0,並重新實現原生腳本,以快速快速地進行編譯,並使用 VS Code 編輯器進行記憶和服務。
在實作中,TypeScript 6.0 已開始使用 5.9號線 y la futura 7.0:調整許多關於線性與現代生態 JavaScript 的編譯選項,引入新的功能和 API estándar,並在 década 期間(目標是 Antiguos、sistemas de módulos) 2026 年已過時的配置和標籤)。 Todo ello mientras mantiene, en esencia, el Mismo modelo de tipos que los desarrolladores ya conocen.
TypeScript 6.0 是經典編譯器的最新版本
Microsoft 宣布 TypeScript 6.0 最新版本將支援 JavaScript 編譯器,歷史悠久的“Strada”。 7.0 的一部分,新的後端 Go 的主角,名稱為“Corsa”,是構建夜間模式和麵向 VS Code 的特定擴展的形式。
請參閱 Go 語言中的語言、中文技術、分析、檢查、必要條件、發出 JavaScript。該目標是解決當前問題的主要方法,包括以下幾個方面的可見內容:在大型專案中安排長期的語言服務,在 CI 和記憶中收集和使用不同的單一儲存庫。
公共設施與國家計畫的實際比較。 VS Code 的程式碼(已編輯了 1,5 百萬行)在 77,8 秒的時間內完成了經典編譯器的分析,在 Go 中完成了 7,5 秒的編譯器,很快就完成了 10 次。劇作家,有 356.000 行,從 11,1 第二行到 1,1,y TypeORM,有 270.000 行,從 17,5 到 1,3。
Estos números no single implican builds más rápidas en CI;編輯中的坎比安經驗日記。在 VS Code 中,可以安排語言服務的時間,大約為 9,6 秒到 1,2,並減少記憶的縮減。 Para muchos裝備,esosignifica que ya no hace falta aceptar como「正常」esperar varios segundos cada vez que abren el editor o ejecutan un chequeo completo con tsc --noEmit.
與本地程式碼的編譯、使用多線程能力和記憶體比較相關的其他方法的對比。進行平行分析,對一個專案進行平行分析,或對多個專案進行並行編譯,並提供專案和修改的參考資料 --build。 Todo ello 與新實作的增量編譯組合。
¿ Por qué reescribir TypeScript en Go y no en Rust u otro lenguaje?
註解的更多決定是透過新編譯器、Rugar de Rust、C++ 和其他與其他版本相關的選項來選擇 Go 語言的。一個初步的前景,sobre todo en un ecosistema donde muchas herramientas de nueva Generations (SWC, oxc, etc.) se han reescrito en Rust。
TypeScript 的裝置與 Go 的各種實作動機:根據 Lado 的建議,您可以根據需要調整記憶指定的贊助人,並在編輯器中將記憶管理手冊簡化為完整的記憶。另外,語言結構和提示模型允許直接與現有的 TypeScript 程式碼進行相對轉換,這與 Rust 的侵入性形成鮮明對比。
Go 的主題是:一種語言,一種形式的“創意”,以明確的方式表達我們的觀點和方向。您可以透過專案審查和 TypeScript 編譯器的大型生活來進行翻譯,以供未來的合作者存取的主要成本和基礎程式碼進行翻譯。
當然,我們對 Rust 沒有任何批評,因為它是 Go 風格和 TypeScript 文化中的實用主義。使用可預測形式的「簡單功能」優先考慮語言,透過各種語言的實驗或極端複雜的記憶模型來實現設備生活日記的複雜化。
在編譯過程中,遷移過程中可能會涉及 Lenguaje 伺服器協定 (LSP) 的深刻採用,這是 VS Code 的其他編輯器,可以與新後端一起使用“慣用語”,並受益於特定整合的依賴。
如何真正了解 TypeScript 6.0
現在,在 Go 編譯器中,TypeScript 6.0 引入了實際的視覺效果和視覺化效果,日復一日地介紹了新的價值,以及與特定 JavaScript 相關的最佳技巧和路線。。 La idea es que, cuando llegue 7.0, la transición sea lo más suave posible porque la Mayoría de proyectos ya habrán aceptado las nuevas reglas del juego.
Uno de los cambios estrella es que el modo estricto (strict) 為叛逃做好準備。持續一段時間,請多推薦 arrancar cualquier proyecto serio con "strict": true, pero el valor por defeto seguía siendo false。 6.0 假設您需要現代預製模型和最重要的模型,並保留取消啟動的選項。 "strict": false en tsconfig.json.
實際情況與模組和目標的預設關係。叛逃的新勇氣 module es esnext,反映了 ESM 的生態定義和主要格式,是 Node.js 的海洋直接和現代導航器或捆綁器的導航器。蘇維茲埃爾 target 隱含了 ECMAScript 版本中與 TypeScript 相關的最新版本(實際情況) es2025),假設運行時常青的無所不在,並為安提瓜島 ES5 平台進行最佳化。
另一個重要的新穎之處是 noUncheckedSideEffectImports 叛逃者的行動。探測器的這個選項可以單獨實現輔助效果,並且可以解決提示錯誤或依賴實際情況的問題,並參考程式碼中的明確形式。啟動新項目的穩健清單。
相反,該選項 libReplacement 如果要取消啟動或損壞項目,請不要進行其他配置,否則可能會造成損失。就美國的整體趨勢而言,美國的趨勢很簡單,但可合理利用的時代卻是一個需要認真考慮的項目。
Cambios en inferencia ytipado: menos sensibilidad al contexto en funciones sin this
關於配置的調整,TypeScript 6.0 包括一些有趣的問題和一些客戶問題。經典的物件和方法是與其他功能參數相關的方法,並且依賴其他屬性的一部分,因此可以與 claves 的順序進行連接。
特別是, las funciones escritas con sintaxis de método tienen un parametro this implícito que hacía que el compilador tratase esos 回調 como “sensibles al contexto”。 Cuando la inferencia de tipos para un generico y la obtención del Tipo contextual tiraban en direcciones opuestas, TypeScript 更喜歡 saltarse esos 回調 a la hora de inferir, y acababa marcando como unknown 參數是現實中確定的完美的確定對象的其他部分的字面意義。
在 6.0 中,編譯器會考慮參數的上下文中是否有功能 this Nunca se utiliza de sucuerpo。 De esta forma, una función declarada como método pero que no hace Referencia a this 其形式與 una 箭頭功能類似,可以提供豐富的推理訊息,獨立於物件的屬性順序。
調整以減少因子宮參數混亂而造成的錯誤類別 unknown 罪有應得。符合人體工學原理的設計:從沒有任何設計的角度出發的模型,透過啟發式推斷,可以幫助市長解決實際問題。
子路徑導入前 #/ 和模組解決方案
TypeScript 6.0 可以透過子路徑導入來支援 Node.js 的特定功能。哈斯塔哈斯波科,聲明埃爾坎波 imports en package.json, los alias internos debían empezar con # 後續文本 #root o #utils。在實踐中,結果是任意的,並且在生產過程中是可以預先確定的。
Node 20 的最新版本允許定義子路徑 #/, es decir, sin un identificador “intermedio” obligatorio。 Esto simplifica esquemas muyhabituales, 類似於 lo que muchos desarrolladores ya usan con bundlers, donde se prefiere @/... o #/... como raíz lógica del proyecto。
TypeScript 包含多種模組解析方式 node20, nodenext y bundler。其意義在於項目的使用 "imports": { "#": "./dist/index.js", "#/*": "./dist/*" } en package.json 自動完成和組合技巧的連貫性可能會帶來一些麻煩,以確保節點恢復正常運作。
組合可能性的其他最佳實踐 --moduleResolution bundler 同 --module commonjsHasta ahora, la resolución bundler estaba limitada a módulos esnext o preserve, pero con la deprecación de --moduleResolution node (別名 node10),許多 CommonJS 的基礎都是可遷移的。 Esta 組合 cubre precisamente ese Hueco。
La nueva bandera –stableTypeOrdering 和 la preparación para paralelismo en 7.0
Uno de los cambios estructurales más profundos del compilador nativo en 7.0 es la adopción de un modelo de análisis paralelo real,多個“trabajadores” pueden recorrer arbol de sintaxis 和 grafo de titos en paralelo。這是一個令人好奇的問題:如果內部的 ID 和符號依賴順序,則其結果並不決定於存取的順序是否完美。
在實際編譯器中,輸入的資訊是增量順序的識別符,並且是在您所遇到的情況下的,並且 ID 是使用的、其他的、順序的聯盟和屬性列表。詳細說明 5.x 的順序 100 | 500 podía invertirse a 500 | 100 這是常量字面介紹 500 前面提到的 100 在文件中。
En 7.0 是不可接受的,因為執行程式與其他程式不同。該解決方案是設計決定性秩序的演算法,以解決物件的問題和符號的問題,以及解決秩序的問題。 De esta manera, la Misma union siempre se imprimirá de la Misma forma (100 | 500, por ejemplo), independientemente de como se haya recorrido el codigo.
對於裝置上的偵測器差異,TypeScript 6.0 引入了選項 --stableTypeOrdering。啟動後,經典編譯器採用了 7.0 版本的配置規則,並與各個版本之間的比較進行了簡化,特別是聲明文件和錯誤訊息。
你必須記住這一點 --stableTypeOrdering Tiene un coste de rendimiento apreciable, con ralentizaciones de hasta un 25% en algunos proyectos。官方建議在遷移或差異化採購期間使用戰術戰術,但不可永久配置。
Nuevos 的目標平台 API:es2025、Temporal、upsert 和 RegExp.escape
TypeScript 6.0 結合了目標和圖書館 es2025 這麼多 target 至於 lib。 ES2025 沒有引入新的語言構建,sí consolida varias APIs que han alcanzado ya el estado Final en el proceso de estandarización, como RegExp.escape, nuevos métodos en Promise, colecciones e iteradores.
En este nuevo nivel, algunas declaraciones que antes vivían bajo esnext 他們搬到 es2025包括 Promise.try, nuevos métodos de Iterator y operaciones añadidas a Set。允許專案簡化並鞏固,以與「實驗」結合使用的 esas API 的最新進展 esnext.
6.0 中的所有主角都融入了 API Temporal 的功能,並具有必要性 Date 在 JavaScript 中。時間上,在第 3 階段,我們將在平台上進行一系列的工作,包括即時、時間、時間、時間和日曆的精確提示,以及實際的系統中的經典錯誤。
TypeScript 揭示了時間寬度的提示 esnext o se indica explícitamente "lib": o "esnext.temporal"。這是可能的實驗,可以在運行時進行臨時性的操作,例如在中間的填充中,在自動完成和檢查方面進行補充。
另一種新的方式是透過「更新插入」方法來進行集合的操作和技巧的支持 Map y WeakMap: getOrInsert y getOrInsertComputed。在 ECMAScript 第 4 階段的形式化中,我們經常使用的方法是:「如果存在,烏薩拉;如果不,插入埃斯特價值(或結果功能)和發展」。
同 getOrInsert, el código que ante hacía una secuencia de has, get, set y almacenamiento 顳葉減少 una llamada clara y Tipada。 和 getOrInsertComputed 允許重新計算因叛逃而造成的勇氣,但如果沒有任何現有條件,則退出的成本必須符合後備要求的執行規則。
En paralelo, 6.0 提示新功能 RegExp.escape, otra propuesta ya aprobada por TC39。方法是在常規表達文字中編寫和開發極地逃生版本,並編寫逃生記憶贊助人的腳本,並減少文本中的漏洞或錯誤。
DOM 和全域庫的實作:dom.iterable 整合和 lib 重新配置
TypeScript 的 DOM 函式庫在 6.0 中可用文件 lib.dom.iterable.d.ts y lib.dom.asynciterable.d.ts, que antes se incluían opcionalmente para entornos sin soporte de Iterable y AsyncIterable, 考慮到不可分割的部分 lib.dom.d.ts.
在實踐中,這意味著沒有必要的 "dom.iterable" 矩陣 "lib" 直接與 DOM 相關的迭代 NodeList o HTMLCollection。 用 "lib": 巴斯塔,演算法邏輯在世界上是一個不存在的實踐的支持者。
Si un proyecto ya declaraba tanto dom 如 dom.iterable,根據功能的不同簡化配置。附加圖書館的名稱有多種用途,但我們的檔案庫中的所有內容都與主要網路圖書館的融合有關。
Un cambio de mucho más calado afecta al Campo types de compilerOptions en tsconfig.jsonHasta ahora, cuando types 沒有具體說明,TypeScript escaneaba node_modules/@types 其中包括有關可選項的表格的隱式內容、全球符號過程的介紹 @types/node, @types/jest y otros paquetes, aunque el codigo no los importase directamente.
重要的重大項目或單一項目與潛在依賴關係的共存關係, además de 介紹魯伊多和全球定義中可能存在的衝突,但實際上沒有必要。 En 6.0,叛逃者的勇氣 types pasa a ser un array vacío [].
La consecuencia práctica es que, apartir de ahora, los proyectos declarar explícitamente que paquetes de tipos globales desean cargar, por ejemplo "types": 。許多裝備都可以在最明智的情況下進行編譯(其中 20% 和 50% 是與 Microsoft 比較的數據),可以簡單地消除不加區分的情況。
Para quienes necesiten mantener elcomportamiento antiguo de “cargarlo todo”, sigue Existiendo la opción de poner "types": 、重新啟動枚舉器 @types。沒有絕對的,我對設備的建議是選擇性的,並列出了單獨的重要文件,以供預測。
rootDir、tsconfig 和其他調整工具的兼容性
其他與新語意缺陷相關的配置 rootDir。在此之前,我們將透過 TypeScript 來說明專案的目錄,該目錄包含所有未聲明的存檔內容。我必須對所有先前的檔案進行分析,包括發射、邏輯複雜性和成本。
En 6.0,叛逃者的勇氣 rootDir 簡單的生活指導 tsconfig.json. Solo en el caso de ejecutar tsc 根據設定檔中的命令,您可以透過啟發式方法推斷出內部檔案的一部分。
Si un proyecto daba por sentado que la raíz común de su código fuente estaba, por ejemplo, en ./src 是直接將 acabasen 的檔案編譯出來的 ./dist, ahora puede encontrarse con rutas como ./dist/src/index.js。明確的配置演算法解決方案 "rootDir": "./src" y ajustar el patrón de include 最後。
存在與 CLI 相關的重要的小問題 tsc 與目錄相關的檔案名稱 tsconfig.json。現在,我忽略了配置訊息,但對實際應用中的選項有很多困惑。在 6.0 的一部分,esto 會產生一個明確的錯誤,伴隨著 que 的訊息 tsconfig.json 請不要將檔案放在comandos 線上。
如果你的意圖是無知的 tsconfig.json y 編譯臨時檔案,存在新標誌 --ignoreConfig que desactiva ese error y deja actuar a tsc 如果有缺陷,請重新配置項目。
棄用的方向:ES5、經典模組系統、baseUrl y más
TypeScript 6.0 的一部分包含了許多已過時的內容或直接刪除的選項和相容訊息,但與生態系統的現實無關。 Todas estas deprecaciones se pueden “silenciar” en 6.0 midte "ignoreDeprecations": "6.0" 在配置方面,Microsoft 明確表示:在 7.0 中存在。
En 底漆 lugar,se depreca el 目標 es5, que durante mucho tiempo fue clave para soportar navegadores antiguos como Internet Explorer。與 IE 的喪失和絕對的霸主常青樹相比,今天需要 ES5 的基礎是原始的和剩餘的。 El nuevo minimo razonable pasa a ser es2015,這是必要的 ES5 deberá 重複一個外部輔助降級。
關係,旗幟 --downlevelIteration 皮爾德·森蒂多和塞·馬卡·坦比恩·科莫·德普雷卡達。 Su uneco propósitoera controlar la semántica de iteradores al apuntar a ES5;現代目標沒有任何影響,但 6.0 的使用方式與廣告不同。
Por el lado de los módulos, dejan de estar soportados los valores amd, umd, systemjs y none 供選擇 module。在之前的時間裡,我們採用了 ESM 的大規模應用和現代的捆綁器,但現在我們已經開始了新的開發。如果應用程式依賴目前版本,建議遷移 ECMAScript 模組並指定與歷史版本相容的捆綁器或專用工具,最好在 Rama 5.x 中永久使用。
同樣的, --moduleResolution node (也被稱為 node10)和 --moduleResolution classic 已宣布過時 nodenext y bundler。首先參考 Node.js 實際的精確度和模組解決方案(包括導出條件、package.json 現代等),第二部分是捆綁器的主要場景,其他一些類似的內容。
存在的配置和配置方面的影響更大 baseUrl 模數查找機制。前蘇聯歷史 paths但是,考慮到一般情況,「解析器」會在執行時匯入實際功能。 En 6.0 se anima a eliminar baseUrl y reemplazarlo por entradas de paths 明確的規則完整,或añadir un comodín "*": 獨奏和虛擬實境的配合。
無法找到Fijar的可能性 esModuleInterop y allowSyntheticDefaultImports a false。在接下來的一段時間裡,建議您使用 CommonJS 和 ESM 的重要模組來啟動該選項。 Con 6.0 中,編譯器假設為「互通安全」模式的缺陷,並有義務調整依賴安提瓜語意的進口,以解決進口問題 import * as express from "express"; 由 import express from "express";.
旗 alwaysStrict deja igualmente de poder deactivarse。在實踐中,要考慮限制 JavaScript 的方式,這會影響保留程式碼的使用原則 await, static, public o private Como identificadores en código “no estricto” ya algunos matices sobre el valor de this 恩函數。實際情況取決於重構的具體情況。
Por último, se elimina --outFile 在單一檔案中選擇多個連線的連線選項。與 Webpack、Rollup、esbuild、Vite 或 Parcel 等打包器一起使用 TypeScript 的迷你打包器,您無需考慮反轉。在管道中使用需要介紹的使用方法。
Cambios de sintaxis 和 directivas:命名空間、導入斷言和 no-default-lib
編譯器的所有選項,TypeScript 6.0 都已建構了與 JavaScript 未來發展相衝突的語法結構。 Un caso notable es el uso de la palabra clave module 聲明命名空間時,需要使用語言版本的初始版本。
同樣,建議使用聲明命名空間的方式 namespace而 module se iba marcando como obsoleta en editores. Con 6.0,ese uso de module 請考慮直接無效,因為未來可能會發生其他事情 模組塊 JavaScript 包含了關於安提瓜島的衝突概念。
外部模組聲明不會影響 declare module "paquete" { ... }, que siguen plenamente soportadas. Solo se prohíbe el patrón module Foo { ... } 我們可以使用命名空間中的經典封裝。
其他情況下,您可能會放棄“進口斷言”的原罪 asserts。 TC39 原始委員會的提案“導入屬性”,請參閱 palabra with en su lugar。 En consecuencia, expresiones como import data from "./file.json" asserts { type: "json" } ahora se marcan como error y deben reescribirse utilizando with.
最後三斜線指令 /// <reference no-default-lib="true"/> 不再支持。我們注意到,在某些情況下,圖書館的圖書庫可能會因缺陷而丟失,但語義時代會混淆,並且會造成惡意。一個cambio,建議使用flags claros como --noLib o --libReplacement 取決於所期望的效果。
透過 JSDoc 進行 JavaScript 分析,本地編譯器可以簡化特殊贊助商的支持 @enum o @constructor。在 7.0 中,我們建議您在檔案中使用「相關」提示。由於報告的功能和錯誤報告較多,因此請參閱有關此類提示的紀錄片。
結合 TypeScript 6.0 對配置和相容性累積進行了重大改造,在十年內適應了 ESM 生態系統,常青樹,現代捆綁器和規範限制,編譯器的道路列表我們將探索最大的並行主義,並以最快的速度體驗最後的歷史。
