可選的 catch 子句變數
感謝 @tinganho 的貢獻,TypeScript 2.5 實現了一項新的 ECMAScript 特性,允許使用者省略 catch 子句中的變數。例如,在使用 JSON.parse 時,你可能需要用 try/catch 包裝函式呼叫,但你最終可能並不需要使用丟擲的 SyntaxError。
tslet input = "...";try {JSON.parse(input);} catch {// ^ Notice that our `catch` clause doesn't declare a variable.console.log("Invalid JSON given\n\n" + input);}
在 checkJs/@ts-check 模式下的型別斷言/轉換語法
TypeScript 2.5 引入了在專案中透過普通 JavaScript 斷言表示式型別的能力。其語法是一個 /** @type {...} */ 註釋,後跟一個需要重新評估型別的帶括號的表示式。例如
tsvar x = /** @type {SomeType} */ AnyParenthesizedExpression;
重複包的去重與重定向
當在 TypeScript 2.5 中使用 Node 模組解析策略進行匯入時,編譯器現在會檢查檔案是否源自“相同的”包。如果檔案源自一個 package.json 包含與之前遇到的包相同的 name 和 version 欄位的包,TypeScript 會將自身重定向到最頂層的那個包。這有助於解決某些問題,例如兩個包可能包含相同的類宣告,但由於包含 private 成員而導致它們在結構上不相容的情況。
作為一個額外的福利,透過避免從重複的包中載入 .d.ts 檔案,這還可以減少編譯器和語言服務的記憶體及執行開銷。
--preserveSymlinks 編譯器標誌
TypeScript 2.5 引入了 preserveSymlinks 標誌,其行為與 Node.js 中的 --preserve-symlinks 標誌相對應。該標誌的行為也與 Webpack 的 resolve.symlinks 選項相反(即,將 TypeScript 的 preserveSymlinks 設定為 true,等同於將 Webpack 的 resolve.symlinks 設定為 false,反之亦然)。
在這種模式下,對模組和包的引用(例如 import 和 /// <reference type="..." /> 指令)都是相對於符號連結檔案的位置進行解析,而不是相對於符號連結所指向的路徑。有關更具體的示例,請參閱 Node.js 官方文件。