类型参数约束 在 TypeScript 1.8 中, 类型参数的限制可以引用自同一个类型参数列表中的类型参数. 在此之前这种做法会报错. 这种特性通常被叫做 F-Bounded Polymorphism. 例子 function assign<T extends U, U>(target: T, source: U): T { for (let id in source) {
Null和undefined类型 TypeScript现在有两个特殊的类型:Null和Undefined, 它们的值分别是null和undefined。 以前这是不可能明确地命名这些类型的,但是现在null和undefined不管在什么类型检查模式下都可以作为类型名称使用。 以前类型检查器认为null和undefined赋值给一切。实际上,null和undefined是每一个类型的有效值, 并且不
keyof和查找类型 在JavaScript中属性名称作为参数的API是相当普遍的,但是到目前为止还没有表达在那些API中出现的类型关系。 输入索引类型查询或keyof,索引类型查询keyof T产生的类型是T的属性名称。keyof T的类型被认为是string的子类型。 示例 interface Person { name: string; age: number; lo
支持混合类 TypeScript 2.2 增加了对 ECMAScript 2015 混合类模式 (见MDN混合类的描述及JavaScript类的"真"混合了解更多) 以及使用交叉来类型表达结合混合构造函数的签名及常规构造函数签名的规则. 首先是一些术语 混合构造函数类型指仅有单个构造函数签名,且该签名仅有一个类型为 any[] 的变长参数,返回值为对象类型. 比如, 有 X 为对象类型, new
ES5/ES3 的生成器和迭代支持 首先是一些 ES2016 的术语: 迭代器 ES2015引入了Iterator(迭代器),它表示提供了 next,return,以及 throw 三个方法的对象,具体满足以下接口: interface Iterator<T> { next(value?: any): IteratorResult<T>; return?(value?: any): Ite
动态导入表达式 动态的import表达式是一个新特性,它属于ECMAScript的一部分,允许用户在程序的任何位置异步地请求某个模块。 这意味着你可以有条件地延迟加载其它模块和库。 例如下面这个async函数,它仅在需要的时候才导入工具库: async function getZipFile(name: string, files: File[]): Promise<File> { con
可选的catch语句变量 得益于@tinganho所做的工作,TypeScript 2.5实现了一个新的ECMAScript特性,允许用户省略catch语句中的变量。 例如,当使用JSON.parse时,你可能需要将对应的函数调用放在try / catch中,但是最后可能并不会用到输入有误时会抛出的SyntaxError(语法错误)。 let input = "..."; try { JS
严格函数类型 TypeScript 2.6引入了新的类型检查选项,--strictFunctionTypes。--strictFunctionTypes选项是--strict系列选项之一,也就是说 --strict模式下它默认是启用的。你可以通过在命令行或tsconfig.json中设置--strictFunctionTypes false来单独禁用它。 --strictFunctionTypes
常量名属性 TypeScript 2.7 新增了以常量(包括ECMAScript symbols)作为类属性名的类型推断支持。 例子 // Lib export const SERIALIZE = Symbol("serialize-method-key"); export interface Serializable { [SERIALIZE](obj: {}): string; }
有条件类型 TypeScript 2.8引入了有条件类型,它能够表示非统一的类型。 有条件的类型会以一个条件表达式进行类型关系检测,从而在两种类型中选择其一: T extends U ? X : Y 上面的类型意思是,若T能够赋值给U,那么类型是X,否则为Y。 有条件的类型T extends U ? X : Y或者解析为X,或者解析为Y,再或者延迟解析,因为它可能依赖一个或多个类型变量。 是否直接
keyof和映射类型支持用number和symbol命名的属性 TypeScript 2.9增加了在索引类型和映射类型上支持用number和symbol命名属性。 在之前,keyof操作符和映射类型只支持string命名的属性。 改动包括: 对某些类型T,索引类型keyof T是string | number | symbol的子类型。 映射类型{ [P in K]: XXX },其中K允许是可以
工程引用 TypeScript 3.0 引入了一个叫做工程引用的新概念。工程引用允许TypeScript工程依赖于其它TypeScript工程 - 特别要提的是允许tsconfig.json文件引用其它tsconfig.json文件。当指明了这些依赖后,就可以方便地将代码分割成单独的小工程,有助于TypeScript(以及周边的工具)了解构建顺序和输出结构。 TypeScript 3.0 还引入了
TypeScript 3.1,在元组和数组上的映射对象类型现在会生成新的元组/数组,而非创建一个新的类型并且这个类型上具有如push(),pop()和length这样的成员。 例子: type MapToPromise<T> = { [K in keyof T]: Promise<T[K]> }; type Coordinate = [number, number] type PromiseC
与ASP.NET v5一起使用 TypeScript 需要你用特定的方式来设置你的工程。 更多关于 ASP.NET v5 的详细信息请查看 ASP.NET v5 文档 在Visual Studio的工程里支持当前的tsconfig.json还在开发之中,可以在这里查看进度#3983。 我们就以在 Visual Studio 2015 里创建一个空的 ASP.NET v5 工程开始,如果你对 ASP
Atom Eclipse Emacs NetBeans Sublime Text TypeScript Builder Vim Visual Studio Visual Studio Code WebStorm Atom-TypeScript,由TypeStrong开发的针对Atom的TypeScript语言服务。 Eclipse TypeScript 插件,由Palantir开发的Eclipse