译者注:可能你们更关心的是 〔译〕TypeScript 2.0 的新特性git
[原文]
TypeScript 2.0 is now available!
September 22, 2016 by Daniel Rosenwassergithub
今天很是高兴的通知你们,TypeScript 2.0 正式版发布了!typescript
TypeScript 2.0 对于产品团队来讲是个伟大的历程,这个历程少不了来自社区和合做伙伴的贡献。这个版本带来了一些新的特性,能够提升开发人员的开发效率。这个版本使 TypeScript 更加接近 ECMAScript 的发展,为 JavaScript 库和工具提供了更为普遍的支持。它经过编辑类工具,带来了先进的编辑体验,加强了语言服务。npm
要使用 TypeScript 2.0,能够下载 TypeScript 2.0 for Visual Studio 2015 (须要更新到 Update3),或者从 NuGet 获取,或者在 Visual Studio Code 中使用 TypeScript 2.0,或者经过 NPM 安装:编程
npm install -g typescript@2.0
要在 Visual Studio "15" 预览版使用 TypeScript 2.0 须要等到下一个预览版发布。json
几年前我就们踏上了 2.0 版本的历程。TypeScript 1.0 成功地向开发人员展现了 JavaScript 与静态类型结合和潜能。编译器的错误检查节约了大量用于查找 BUG 的时间。在开发者们开始建立愈来愈大的 JavaScript 应用时,TypeScript 的编辑器类工具带来了巨大的开发效率提高。然而 JavaScript 是世界上最流行最普遍使用的语言,做为它的超集,TypeScript 还有很长的路要走。segmentfault
TypeScript 1.1 彻底重写了编译器,这带来4倍效率提高。新的编译器核心更加灵活,更快速地迭代,这为之后的版本打下了基础。几乎同时,TypeScript 代码库迁移到 GitHub,这个鼓励社区参与并提供了更好协做平台地方。windows
TS 1.4 和 1.5 主要致力于支持 ES2015/ES6,以期与 JavaScript 语言的发展同步。TypeScript 1.5 还引入了对模块和修饰符〔译者注:相似 Java 中的"注解(Annotation)”,C# 中的“特性(Attribute)”〕,容许 Angular 2 采用 TypeScript,并与咱们的合做一块儿改进 TypeScript。bash
TypeScript 1.6-1.8(1.6, 1.7, 1.8) 对类型系统进行了重大改进,每个版本的发布都让 JavaScript 模式更加清晰,同时也为主要的 JavaScript 库提供支持。这些发布版本一样围绕着对 ES* 的支持,并在快速(译者注:原文 out-of-the-box 是开箱即用的意思,引伸为快速)检查错误方面提高了编译器,使之先进很多。编辑器
今天,TypeScript 语言 2.0 发布让咱们激动不已。在这个版本的 TypeScript 更加接近 ECMAScript 规范,更普遍地支持 JavaScript 库和工具,以及很是棒的语言服务用以向全部主要编辑器提供最佳的编辑体验。因此有些合在一块儿,就能提供最更高效,更灵活的 JavaScript 开发体验。
从 1.0 开始,TypeScript 就不仅是一门语言,它也成长成一个社区。仅上个月,TypeScript 在 NPM 上就有 200 万的下载量,而去年同期只有 27.5 万。此外,咱们的每日构建版本吸引了超过 2000 用户在 GibHub 上参与讨论,以及 1500 用户提交问题。咱们也接受了来自 150 余位用户的 PR〔译者注:Pull Request〕,范围包括修复BUG、原型和主要特性等。
DefinitelyTyped 是咱们的社区发展愈来愈好的另外一个例子。它从一个关于申明文件(用 TypeScript 描述你的 JS 库接口的文件)的小代码库开始,如今已经包含超过 2000 个库的申明,这些申明是 2500 多我的捐献的手工代码。它是目前咱们所知道的最大的正规申明。经过创建 DefinitelyTyped,TypeScript 社区变得不只仅支持使用已经存在的 JavaScript 库,还更好的定义了咱们全部 JavaScript 代码的理解。
TypeScript 社区和更大的 JavaScript 社区为 TypeScript 迄今为止取得的成功发挥了重要做用。不管你捐献代码、宣传、测试、提交问题,仍是在项目中使用 TypeScript,咱们都对你的长期支持表示感谢!
TypeScript 2.0 带来了一些 1.8 所不具备的新特性,其中一些咱们已经在 2.0 Beta 版和候选版的博客中详细说明了。下面会介绍一些如今刚具有的重要特性。你能够在咱们的 WIKI 上阅读推断类型、never
类型、用于函数的 this 类型、tsconfig 对 glob 的支持 等。
typings 和 tsd 已经成为TypeScript 生态系统中极好的工具。直到如今,这些包管理工具帮助用户快速地从 DefinitelyTyped 取得 .d.ts 文件,用于他们的项目。虽然有这些工具,对新用户来讲,学习如何经过这些包管理工具得到和管理申明文件的依赖关系仍然是件痛苦的事情。
在 2.0 中获取和使用申明文件会更容易,好比想获取 lodash 的申明文件,只须要使用 NPM:
npm install -s @types/lodash
上面的命名安装了一个范围包 @type/lodash,这使得 TypeScript 2.0 能在程序中导入(import
) lodash 时自动引用 lodash 的申明。这就是说你不须要其它工具,你的 .d.ts 文件就能找到 package.json 中剩下的依赖。
值得注意的是,typeing 和 tsd 能在已经存在的项目里继续使用,然而兼容 2.0 的申明文件再也不会再经过这些工具生效。所以,咱们强烈推荐使用 TypeScript 2.0 及之后版本的 NPM 流程。
很是感谢 Blake Embrey 在 typings 的工做,是他的工做推动了这项解决方案。
JavaScript 有两个值用于表示“空”——null
和 undefined
。若是 null
是一个价值十亿美圆的错误,undefined
会给咱们带来加倍的损失。在 JavaScript 的世界,这两个值是巨大的错误来源,由于用户常常会忘记分辨 API 中返回的 null
或 undefined
值。
TypeScript 最初的想法是全部类型都是可空的。这就是说,某个数值类型也可能出现 null
或 undefined
值。很不幸,这并不能很好的解决 null
/undefined
的问题。
在 TypeScript 2.0 中,null
and undefined
拥有它们本身的类型,这让开发者能够明确的表达是否容许 null
/undefined
。如今若是某个东西能够是数值或者 null
值,你可使用联合类型 number | null
(读做“number 或 null”)。
由于这是一个破坏性的改变,咱们选项里添加了 --strictNullChecks
模式来容许这种行为。而后在日后的发展中,打开这个选项会成为一个通常的最佳实践,这有肋于捕捉大范围的 null
/undeined
错误。若是想阅读更多关于非空类型的信息,请移步 GitHub 上的 Pull Request。
从 1.8 开始,TypeScript 就已经存在控制流分析,可是从 2.0 开始咱们扩展了分析范围,以对于在任何地方都能分析出可能的类型。如今,配合非空类型,TypeScript 能作更多复杂的检查,好比明确的赋值分析。
function f(condition: boolean) { let result: number; if (condition) { result = computeImportantStuff(); } // 哇哦! 'result' 可能从未初始化! return result; }
很是感谢 Ivo Gabe de Wolff 对这个特性初期的贡献以及后来提供的大量反馈。你能够在 PR 中阅读更多信息。
readonly
修饰词TypeScript 中的不可变编程变得容易了。从 TypeScript 2.0 开始,你能够定义属性为只读。
class Person { readonly name: string; constructor(name: string) { if (name.length < 1) { throw new Error("Empty name!"); } this.name = name; } } // 错误!'name' 是只读的。 new Person("Daniel").name = "Dan";
全部没有匹配设置器的获取器都被认为是只读的。
TypeScript 从 JavaScript 而来。正如如今成千上成的 JavaScript 开发者所知道的那样,TypeScript 开始于 JavaScript 相同的语法和语义,容许开发者使用已经存在的 JavaScript 代码,使用流行的 JavaScript 库,也能够从 JavaScript 中调用 TypeScript 代码。JavaScript 可选的静态类型使 JavaScript 开发者在开发 JavaScript 应用时,可使用高效的开发工工具和实践,好比静态检查,反射等。
咱们会联合合做伙伴和社区的力量继续发展 JavaScript 的类型系统,让用户能够更深层次的将静态类型方法用于 JavaScript。同时,咱们会致力于提升 TypeScript 语言服务和一系列的工具特性,使开发工具变得更智能,以提升开发者的工做效率。
向全部一路走来到 2.0 的人致谢!大家的反馈和热情带来了 TypeScript 及其生态现在的成就。但愿大家对 2.0 的兴奋程度不亚于咱们。
若是你还未使用 TypeScript,必定试试!咱们很是愿意听到你的声音。
祝愉快
TypeScript 团队