BT

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

TypeScript 2.0 Beta版发布,带来可选类型、可区分联合等特性

| 作者 Sergio De Simone 关注 12 他的粉丝 ,译者 谢丽 关注 9 他的粉丝 发布于 2016年7月19日. 估计阅读时间: 4 分钟 | GMTC大前端的下一站,PWA、Web框架、Node等最新最热的大前端话题邀你一起共同探讨。

微软TypeScript项目经理Daniel Rosenwasser宣布,TypeScript 2.0 Beta版发布。该版本带来了丰富的新语言特性,包括非空类型、类型控制流分析和“可区分联合(discriminated unions)”。

按照Rosenwasser的说法,非空类型旨在解决JavaScript中一个常见的缺陷根源:null和undefined。非空类型不允许将null赋给变量,除非它声明为一个可选类型

let foo1: string = null; // 错误!
let foo2: string | null = null; // 可选类型

如上所示,可选类型通过联合类型指定,这是TypeScript 2.0的又一个新特性。可选类型的参数和属性会自动推断。可选类型既可以通过!运算符使用,也可以通过“类型保护(type guards)”使用:

let s: string | undefined = "string"; // 没问题
if (s) {
    f(s);
}
let upperCase = s!.toUpperCase(); // 没问题
let lowerCase = foo2.toLowerCase(); // 错误

在TypeScript 2.0中,非空类型要通过--strictNullChecks标识启用。

TypeScript 2.0还引入了基于控制流的局部变量和参数的类型分析。这是TypeScript类型分析的一项重大改进,借助赋值和控制流结构(例如return、break等等)扩展了2.0版本之前的类型分析。

TypeScript 2.0还有一项新特性是使用关键字private和protected声明私有和保护类型的构造函数。而且,属性现在可以是抽象的了,这就迫使子类必须定义属性存取器:

abstract class A {
  abstract p;
}
class B extends A {
  get p() {...}
  set p(v) {...}
}

除了上面提到的null和undefined类型,TypeScript 2.0还引入了一种新的never类型。该类型的语义是,这个类型的值永远不会出现,例如一个永远不会返回的函数,或者一个处于类型保护下的、永远不会为真的变量:

// 返回never的函数必须有一个不可达的终点
function error(message: string): never {
    throw new Error(message);
}

TypeScript 2.0还提供了其他的新特性,诸如只读属性和索引签名,指定函数隐式参数this的类型模块解析增强等等

安装TypeScript 2.0 Beta,既可以下载面向Visual Studio 2015(需要VS 2015 Update 3)的版本,也可以运行npm install -g typescript@beta。

查看英文原文:TypeScript 2.0 Beta Brings Option Types, Discriminated Unions, and More

评价本文

专业度
风格

您好,朋友!

您需要 注册一个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