TypeScript 3.0 新功能介紹(一)

轉載html

TypeScript 3.0 新功能介紹(一)

TypeScript 3.0 新功能介紹(一)typescript

項目引用

TypeScript 3.0引入了項目引用(project references)的新概念。
項目引用容許TypeScript項目依賴於其餘TypeScript項目 - 特別是容許tsconfig.json文件引用其餘tsconfig.json文件。
指定這些依賴項能夠更容易地將代碼拆分爲更小的項目,由於它爲TypeScript(及其周圍的工具)提供了一種理解構建順序和輸出結構的方法。
TypeScript 3.0還引入了一種新的tsc模式,即--build標誌,它與項目引用一塊兒工做,以實現更快的TypeScript構建。
有關更多文檔,請參閱項目參考手冊頁面。我這裏只簡單介紹下官方介紹的一小部分新功能express

剩餘參數和傳播表達式中的元組

TypeScript 3.0增長了對多個新功能的支持,以與函數參數列表做爲元組類型進行交互。
TypeScript 3.0增長了以下支持:json

經過這些功能,能夠強大地鍵入一些轉換函數及其參數列表的高階函數。數組

使用元組類型的剩餘參數

當剩餘參數具備元組類型時,元組類型將擴展爲一系列離散參數。
例如,如下兩個聲明是等效的:函數

declare function foo(...args: [number, boolean, string]): void;
declare function foo(args_0: number, args_1: boolean, args_2: string): void;

使用元組類型傳播表達式

當函數調用包括元組類型的擴展表達式做爲最後一個參數時,擴展表達式對應於元組元素類型的離散參數序列。
所以,如下調用是等效的:工具

const args: [number, boolean, string] = [42, true, "hello"];
foo(42, true, "hello");
foo(args[0], args[1], args[2])
foo(...args)

通用剩餘參數

容許剩餘參數具備約束爲數組類型的泛型類型,而且類型推斷能夠推斷這些通用剩餘參數的元組類型。
這使得部分參數列表的高階捕獲和傳播成爲可能,以下實例ui

declare function bind<T, U extends any[], V>(
    f: (x: T, ...args: U) => V, x: T): (...args: U) => V;

declare function f3(x: number, y: string, z: boolean): void;

const f2 = bind(f3, 42); // (y: string, z: boolean) => void
const f1 = bind(f2, "hello"); // (z: boolean) => void
const f0 = bind(f1, true); // () => void

f3(42, "hello", true);
f2("hello", true);
f1(true);
f0();

在上面的f2聲明中,類型推斷分別爲T,U和V推斷類型數,[string,boolean]和void。
請注意,當從一系列參數推斷出元組類型並隨後擴展爲參數列表時(如U的狀況),原始參數名稱將用於擴展(可是,名稱沒有語義含義,不然不會
觀察到的)。spa

元組類型中的可選元素

元組類型如今容許?後綴
元素類型的後綴表示該元素是可選的,以下實例rest

let t: [number, string?, boolean?];
t = [42, "hello", true];
t = [42, "hello"];
t = [42];

在--strictNullChecks模式下,一個?修飾符在元素類型中自動包含undefined,相似於可選參數。
若是元素具備?後綴,則元組類型容許省略元素,它的類型上的修飾符和它右邊的全部元素也有```?```修飾符。
當爲元組類型數據被推斷爲剩餘參數時,源中的可選參數將成爲推斷類型中的可選元組元素。

帶有可選元素的元組類型的length屬性表示可能長度的字面類型的並集。
例如,元組類型[number,string?,boolean?]中的length屬性的類型是1|2|3。

在元組類型中剩餘元素

元組類型的最後一個元素能夠是形式爲...X的剩餘元素,其中X是數組類型。
剩餘元素表示元組類型是開放式的,而且可能具備零個或多個數組元素類型的附加元素。
例如,[number, ...string[]]表示帶有數字元素後跟任意數量的字符串元素的元組。以下實例

function tuple<T extends any[]>(...args: T): T {
    return args;
}

const numbers: number[] = getArrayOfNumbers();
const t1 = tuple("foo", 1, true);  // [string, number, boolean]
const t2 = tuple("bar", ...numbers);  // [string, ...number[]]


具備剩餘元素的元組類型的length屬性的類型是number。

其他特性請留意後續分享。

相關文章
相關標籤/搜索