轉載html
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。
其他特性請留意後續分享。