微软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