写点什么

TypeScript 1.4 版本发布,增加了联合类型以及更多的 ES6 特性

  • 2015-01-30
  • 本文字数:1087 字

    阅读完需:约 4 分钟

微软发布了 TypeScript 1.4 版本,即他们这个 JavaScript 超集的最新版本。除了支持新的 TypeScript 特性比如联合类型之外,他们还提供了编译到 ECMAScript 6 的目标模式。

一个期望值很高的特性就是联合类型。通常在 JavaScript 代码中,会在运行时动态检查函数参数来决定其行为。TypeScript 的联合类型为这些场景提供了更好的类型检查机制。下面是官方声明中提供的例子:

复制代码
function f(x: number | number[]) {
if (typeof x === "number") {
return x + 10;
}
else {
// return sum of numbers
}
}

其中参数 x 就是一个联合类型,可以为 number 或者 number 数组。代码中能够使用 typeof 来检查类型,从而根据不同结果执行不同的操作。Facebook 的 JavaScript 静态类型检查框架 Flow 也提供了类似的类型检查机制。

DefinitelyTyped 项目的贡献者 John Reilly 比较并展示了 angular-route.d.ts在 TypeScript1.4 前后的区别,他说:

虽然在 TypeScript 1.4 之前能够重载函数,但是并不能重载接口成员。这意味着要为这些属性建模就必须找到适合所有场景的最佳通用类型。这也就总意味着没有类型。这种方案虽然可行但无法为消费代码(Consuming Code)带来很好的类型安全性。

1.4 版本也支持了 ES6 的 let 和 const 特性,不过它们只能在编译成 ES6 目标时使用。微软希望在未来的更新中以 ES5 为编译目标时也能支持此特性。能够编译成 ES5 的一个新 ES6 特性是基础字符串模板,它使用回勾号(键盘左上角数字 1 左边按键的字符)来定义这样的模板:

复制代码
var width = 640;
var height = 480;
var areaDisplay = `The pixel count is ${width * height}`;

不过标签模板字符串(Tagged Template String)只有在以 ES6 为编译目标时才能被支持。

微软已经谈到 TypeScript 2.0 的目标是“完全支持 ECMAScript 6 标准”。版本 1.4 是一个重要的更新,但是后面还有很多事情要做。根据 Kangax ES6 兼容表,TypeScript8% 的兼容比例在竞争中明显落后。不过,TypeScript 的目标不仅仅是 ES6 兼容性,它并不是像 6to5 那样做一个单纯的 ES6 转换器而是另有其它目的。

展望今后,TypeScript 的路线图表明下个版本(1.5)将会支持for…of 和解构(destructuring)。

TypeScript 1.4 目前已经可以在 Visual Studio 2015 CTP5, Visual Studio 2013, NPM, 以及 TypeScript Playground 中使用。

查看英文原文: TypeScript 1.4 Released, Adds Union Types, More ES6 Features


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2015-01-30 00:023536

评论

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

为什么直播系统不用RTP协议

soolaugust

WebRTC 直播 RTMP rtp

第二次推荐笔记:wolai

申屠鹏会

全球移动服务生态的暗涌与新机

脑极体

为什么你做的 Excel 表不好用?

Tony Wu

效率工具 产品设计 Excel ER图

Spring Boot Actuator微服务服务监控

xcbeyond

Java 微服务 springboot actuator 服务监控

从根上学习Git

书旅

git 工具 版本控制 版本管理工具

优化教育体验 智微智能高品质录播系统

InfoQ_967a83c6d0d7

「C++ 篇」答应我,别再 if else 走天下了可以吗

小林coding

c++ 编程 设计模式 编程习惯 编程风格

音画同步体验有多好,来看看即构的自研互动白板就知道啦

ZEGO即构

在线教育 SVG canvas

修改系统时间,导致 sem_timedwait 一直阻塞的问题解决和分析

小林coding

Linux 编程 问题处理

C++ 深入浅出工厂模式(初识篇)

小林coding

c++ 设计模式 工厂模式

大数据技术发展(一):大数据技术的起源

cristal

Java 大数据 hadoop

C++ this指针的理解和作用

小林coding

c c++ 指针

Newbe.Claptrap 框架如何实现在多种框架之上运行?

newbe36524

Docker 云计算 微服务 .net core ASP.NET Core

gRPC在Spring Cloud中的应用

xcbeyond

Java gRPC SpringCloud

老张「原创小说」

瓜藤老祖

个人成长

为什么使用Portainer,而不是Docker CLI来管理Docker环境

xcbeyond

Docker 运维 Portainer

对待一件事,从不喜欢再到喜欢,转变需要多大

良知犹存

程序人生

SpringCloud(Netflix)-技术专题-微服务入门介绍

码界西柚

C++ 深入浅出工厂模式(进阶篇)

小林coding

c++ 设计模式 工厂模式

2020大厂web前端面试常见问题总结

华为云开发者联盟

CSS 面试 响应式 大前端 浏览器

让类/进程/脚本「单身」的方法

小林coding

c c++ Shell 设计模式 单例模式

直播技术的背后--RTMP协议

soolaugust

直播 RTMP

Web 全栈开发利器: 强大的在线 Cloud IDE

华为云开发者联盟

Web python3.x 全栈 编码 CloudIDE

超超超全递归技巧讲解,这次带你拿下递归

多选参数

数据结构 算法 递归 数据结构与算法

精美前端UI(VUE)界面,ASP.NET通用工作流开发分享

雯雯写代码

工作流 可视化

字节跳动想招什么样的技术人?

池建强

HTTP协议-基础

Jaykey

大前端 HTTP

误执行 rm -fr /*,我删删删删库了,要跑路吗?

小林coding

Linux 程序人生 Shell linux命令

国内首家 ABM 营销技术服务商火眼云完成5000万元A轮融资

人称T客

HTTP协议-进阶

Jaykey

大前端 HTTP

TypeScript 1.4版本发布,增加了联合类型以及更多的ES6特性_JavaScript_David Iffland_InfoQ精选文章