BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

TypeScript 2.9发布,更新了对ES.Next的支持

| 作者 Dylan Schiemann 关注 7 他的粉丝 ,译者 张卫滨 关注 13 他的粉丝 发布于 2018年6月7日. 估计阅读时间: 5 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

看新闻很累?看技术新闻更累?试试下载InfoQ手机客户端,每天上下班路上听新闻,有趣还有料!

TypeScript 2.9包含多项针对该语言的改善。现在,能够支持ES.Next的import.meta,同时支持keyof和映射对象类型中的符号与数字字面量。

目前,ES.Next import.meta是一个stage 3的提案,预期将会包含在ES2019中。该特性允许宿主环境提供模块特定的有用信息,用来在模块中执行。TypeScript 2.9包含了对import.meta的支持。

TypeScript的项目主管Daniel Rosenwasser认为在TypeScript 2.9之前,导入类型是一项很具挑战性的事情:

长期以来,在TypeScript中无法在其他模块中引用某个类型或者模块本身的类型,这是一件很痛苦的事情,除非我们在文件的顶部包含一个导入语句。在有些场景下,这是一个便利性的问题——我们可能并不希望仅仅因为要描述用到某个类型,就需要在自己的文件上添加一个import语句。

TypeScript 2.9解决了这个问题。不再需要导入一个模块,只需检索类型的定义即可,在2.9之前,需要这样编写:

import * as _foo from "foo";

export async function bar() {
    let foo: typeof _foo = await import("foo");
}

现在,工程师可以按需导入类型:

export async function bar() {
    let foo: typeof import("./foo") = await import("./foo");
}

TypeScript 2.9的其他变化是与ECMAScript标准保持一致。在TypeScript 2.9中,在rest参数之后(即...rest格式的参数-译者注)不允许以逗号作为结尾,这样是为了与ECMAScript标准保持一致。泛型标记模板(generic tagged template)中可以使用类型参数,这样的话与ES2015的模板协作使用就更加容易了。

除了与ES.Next保持一致,TypeScript 2.9发布版本还提升了在其他环境中的开发体验,包括Node.js和React。

希望使用ES模块来导入JSON文件的Node.js工程师现在可以这样做了,要达到目的需要将模块解析(moduleResolution)指定为Node并将--resolveJsonModule标记设置为true。

使用React JSX语法的用户现在能够解析并检查JSX开放和自关闭标签的类型参数,在此之前,这是TypeScript支持JSX中的一个限制。

将新的--declarationMap标记与--declaration标记联合使用时,允许TypeScript在输出.d.ts文件时,生成.d.ts.map源映射(source map)文件。TypeScript语言服务(Language Service)能够基于位置定义的声明文件匹配它们的原始源。

TypeScript 2.9中添加的另外一项重要特性是在keyof和映射对象类型(mapped object type)中使用符号(symbol)和数字字面量。keyof操作符要比TypeScript推断唯一符号类型这一特性更早,因此keyof一直不能识别符号化的key。

TypeScript 2.9改变了keyof的行为,能够识别唯一符号和数字字面量类型。因为这是一个破坏性的变更,所以可以通过--keyofStringsOnly标记切换回TypeScript 2.9版本之前的行为模式。

另外一个需要注意的破坏性的变更是在使用strictNullChecks模式时,没有限制的类型参数不允许赋值给object,因为泛型类型参数可能会被任意的原始类型替换。

在TypeScript 2.9发布版本中还包含了诊断和语言服务的一些改善,以及其他的一些重构服务,比如将私有字段转换为getter和setter语义,将TypeScript文件中的require转换为ES的导入语句。

TypeScript 2.9现在能够基于Apache 2许可证协议来获取,可以通过npm的npm install -g typescript命令来安装。欢迎通过TypeScript GitHub项目进行贡献和反馈。

查看英文原文:TypeScript 2.9 Release Updates ES.Next Support

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT