2

译者注:可能大家更关心的是 〔译〕TypeScript 2.0 的新特性


[原文]
TypeScript 2.0 is now available!
September 22, 2016 by Daniel Rosenwasser

今天非常高兴的通知大家,TypeScript 2.0 正式版发布了!

TypeScript 2.0 对于产品团队来说是个伟大的历程,这个历程少不了来自社区和合作伙伴的贡献。这个版本带来了一些新的特性,可以提高开发人员的开发效率。这个版本使 TypeScript 更加接近 ECMAScript 的发展,为 JavaScript 库和工具提供了更为广泛的支持。它通过编辑类工具,带来了先进的编辑体验,增强了语言服务。

要使用 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 需要等到下一个预览版发布。

2.0 历程

几年前我就们踏上了 2.0 版本的历程。TypeScript 1.0 成功地向开发人员展示了 JavaScript 与静态类型结合和潜能。编译器的错误检查节约了大量用于查找 BUG 的时间。在开发者们开始创建越来越大的 JavaScript 应用时,TypeScript 的编辑器类工具带来了巨大的开发效率提升。然而 JavaScript 是世界上最流行最广泛使用的语言,作为它的超集,TypeScript 还有很长的路要走。

TypeScript 1.1 完全重写了编译器,这带来4倍效率提升。新的编译器核心更加灵活,更快速地迭代,这为以后的版本打下了基础。几乎同时,TypeScript 代码库迁移到 GitHub,这个鼓励社区参与并提供了更好协作平台地方。

TS 1.4 和 1.5 主要致力于支持 ES2015/ES6,以期与 JavaScript 语言的发展同步。TypeScript 1.5 还引入了对模块和修饰符〔译者注:类似 Java 中的"注解(Annotation)”,C# 中的“特性(Attribute)”〕,允许 Angular 2 采用 TypeScript,并与我们的合作一起改进 TypeScript。

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 开发体验。

TypeScript 社区

从 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 有什么新鲜玩意儿?

TypeScript 2.0 带来了一些 1.8 所不具有的新特性,其中一些我们已经在 2.0 Beta 版和候选版的博客中详细说明了。下面会介绍一些现在刚具备的重要特性。你可以在我们的 WIKI 上阅读推断类型never 类型用于函数的 this 类型、tsconfig 对 glob 的支持 等。

获取简易申明文件 (.d.ts)

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 有两个值用于表示“空”——nullundefined。如果 null 是一个价值十亿美元的错误undefined 会给我们带来加倍的损失。在 JavaScript 的世界,这两个值是巨大的错误来源,因为用户经常会忘记分辨 API 中返回的 nullundefined 值。

TypeScript 最初的想法是所有类型都是可空的。这就是说,某个数值类型也可能出现 nullundefined 值。很不幸,这并不能很好的解决 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 团队


边城
59.8k 声望29.6k 粉丝

一路从后端走来,终于走在了前端!