转载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。
其他特性请留意后续分享。