TypeScript 3.1

元組和陣列上的對映型別

在 TypeScript 3.1 中,作用於元組和陣列上的對映物件型別[1] 現在會產生新的元組/陣列,而不是建立一個成員(如 push()pop()length)被轉換過的新型別。例如

ts
type MapToPromise<T> = { [K in keyof T]: Promise<T[K]> };
type Coordinate = [number, number];
type PromiseCoordinate = MapToPromise<Coordinate>; // [Promise<number>, Promise<number>]

MapToPromise 接收一個型別 T,當該型別為類似 Coordinate 的元組時,只有數值屬性會被轉換。在 [number, number] 中,有兩個數值命名屬性:01。當給定這樣的元組時,MapToPromise 將建立一個新的元組,其中 01 屬性是原型別的 Promise。因此,最終型別 PromiseCoordinate 的結果型別為 [Promise<number>, Promise<number>]

函式上的屬性宣告

TypeScript 3.1 帶來了在函式宣告和 const 宣告的函式上定義屬性的能力,只需在同一作用域內對這些函式上的屬性進行賦值即可。這使我們能夠編寫規範的 JavaScript 程式碼,而無需訴諸 namespace 這種 hack 手段。例如

ts
function readImage(path: string, callback: (err: any, image: Image) => void) {
// ...
}
readImage.sync = (path: string) => {
const contents = fs.readFileSync(path);
return decodeImageSync(contents);
};

在這裡,我們有一個函式 readImage,它以非阻塞的非同步方式讀取影像。除了 readImage,我們還在 readImage 本身提供了一個名為 readImage.sync 的便利函式。

雖然 ECMAScript 匯出通常是提供此功能的更好方法,但這種新的支援使以這種風格編寫的程式碼能夠在 TypeScript 中“直接工作”。此外,這種屬性宣告方法使我們能夠在 React 函式元件(以前稱為 SFC)上表達常見的模式,如 defaultPropspropTypes

ts
export const FooComponent = ({ name }) => <div>Hello! I am {name}</div>;
FooComponent.defaultProps = {
name: "(anonymous)",
};

[1] 更具體地說,是上述形式中的同態對映型別。

使用 typesVersions 進行版本選擇

來自社群的反饋以及我們自己的經驗表明,在利用最新的 TypeScript 特性的同時還要兼顧使用舊版本的使用者是非常困難的。TypeScript 引入了一個名為 typesVersions 的新功能來幫助應對這些場景。

您可以在 宣告檔案部分的“釋出”章節 中瞭解更多相關資訊。

TypeScript 文件是一個開源專案。透過 提交 Pull Request 來幫助我們改進這些頁面 ❤

此頁面的貢獻者
DRDaniel Rosenwasser (51)
OTOrta Therox (18)
CFCory Forsyth (1)
MUMasato Urai (1)
SSSebastian Silbermann (1)
10+

最後更新:2026 年 3 月 27 日