写点什么

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

  • 2018-06-06
  • 本文字数:1449 字

    阅读完需:约 5 分钟

看新闻很累?看技术新闻更累?试试下载 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

2018-06-06 16:041760

评论

发布
暂无评论
发现更多内容

高空立体云防控系统搭建,智能化平安小区建设方案

t13823115967

平安小区 智慧平安社区建设

字节二面跪拜“Redis源码”后,面试官直接推荐这份笔记!真是NB

比伯

Java 编程 架构 面试 程序人生

为什么香港云服务器更适合放新网站

德胜网络-阳

PostgreSQL 13 RPM中有哪些新功能?

PostgreSQLChina

数据库 postgresql 开源

软件测试必须掌握的http网络协议知识

测试人生路

软件测试

Demo分享丨看ModelArts与HiLens是如何让车自己跑起来的

华为云开发者联盟

人工智能 智能车 hilens

没能进入大数据领域

escray

面试 面经

周立齐出任电动车联合创始人:网红经济背后的病态消费心理

石头IT视角

抢先体验全新升级版Eternal Wallet!

Geek_c610c0

数字货币 数字货币钱包开发

扒开 SqlSession 的外衣

田维常

mybatis

如何通过 Serverless 轻松识别验证码?

Serverless Devs

人工智能 Serverless 云原生

一线大厂开源三份JDK+Spring+Mybatis源码笔记

Java架构追梦

Java spring 源码 jdk mybatis

限时!字节Java程序性能优化宝典开源,原来这才叫性能优化

996小迁

程序员 面试 性能优化 笔记

云视频技术领军人赵加雨:如何提升在线教育课堂互动体验

拍乐云Pano

音视频 在线教育 RTC 互动课堂 白板

智慧社区综合管理平台搭建,智慧平安城市建设

13530558032

APICloud AVM 多端开发 |外卖 app 开发案例源码教程(上)

YonBuilder低代码开发平台

Vue 大前端 Web Worker 移动终端

Flash Player终将成为历史,HTML5正站在舞台的中央

葡萄城技术团队

面试必问的 Redis:主从复制

Java架构师迁哥

九环智能合约开发

V19927655815

APP开发

移动生态盘点与HMS生态解析

华章IT

华为 Android Studio 移动开发 HMS

如何基于 SDK 快速开发一款IoT App 控制智能灯(iOS 版)

IoT云工坊

ios App 物联网 IoT sdk

为什么说rollup比webpack更适合打包库

fengxianqi

大前端 Rollup webpack

应急指挥中心平台搭建,移动可视化指挥解决方案

t13823115967

可视化数据分析搭建 应急指挥

区块链溯源平台优势,区块链溯源系统解决方案

13530558032

星域母子币系统软件开发|星域母子币APP开发

系统开发

盘点 2020 | 10 天开发前台系统技术系列

老魚

CSS 大前端 全栈 js 盘点2020

一个企业用电有多浪费?90后开发者大显身手,让每度电从此更“聪明”!

华为云开发者联盟

AI 物联网 智慧园区

微服务架构思考 - 理清楚,管起来

jorden wang

加密猫MIMI系统APP开发|加密猫MIMI软件开发

系统开发

2021 云原生走向何处?

云原生实验室

用一把吃鸡的时间,免费上云搭建网站应用

华为云开发者联盟

服务 建站

TypeScript 2.9发布,更新了对ES.Next的支持_JavaScript_Dylan Schiemann_InfoQ精选文章