写点什么

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

2016 年 7 月 18 日

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

2016 年 7 月 18 日 19:001048
用户头像

发布了 1008 篇内容, 共 313.6 次阅读, 收获喜欢 282 次。

关注

评论

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

英特尔®AI计算盒参考设计发布 加速智能边缘崛起

最新动态

什么?不写代码也能做功能开发! -RUOYI 教程二

Java_若依框架教程

Java 无代码开发 若依

授人以渔:stm32资料查询技巧

华为云开发者社区

架构 armv8 芯片 华为云 二进制

你问我答:微服务治理应该如何去做?

BoCloud博云

微服务 PaaS API 容器云 博云

Vue中使用装饰器,我是认真的

前端有的玩

Java Vue 装饰器

数据库系统设计概述

码哥字节

数据库 redis mongodb elasticsearch 数据库设计

手写一个重入锁

诸葛小猿

synchronized CAS 重入锁 compareAndSwap ReentrantLock

基于 Golang的侵入式 Opentracing实现全链路追踪 ----实践篇

是老郭啊

数据人必须知道的SQL概念(A—Z)

大唐小生

sql 数据 职场成长

<<前端进阶篇>> PDF 出炉了 — 「阿宝哥」,精心准备的 6 万多字 170 页的前端进阶资料

阿宝哥

前端 前端进阶 前端教程

智能膜切机,解决手机贴膜行业难题

Geek_116789

第九周

hdhdh

系统设计系列之如何设计一个短链服务

看山

架构 面试 分布式 架构设计 短链服务

飞天茅台超卖事故:Redis分布式锁请慎用!

程序员生活志

redis 分布式

计算机网络基础(十一)---网络层-OSPF协议

书旅

计算机网络 网络 协议栈 OSPF

秒杀系统问题与方案设计

superman

秒杀 架构总结

老哥,您看我这篇Java集合,还有机会评优吗?

cxuan

Java 后端

原创 | 使用JPA实现DDD持久化-O与R:两个世界

编程道与术

Java hibernate DDD JDBC jpa

将信将疑,将中台进行到底

郭华

Newbe.Claptrap 框架如何实现多级生命周期控制?

newbe36524

架构 微服务 微服务架构 .net core ASP.NET Core

实用!一键生成数据库文档,堪称数据库界的Swagger

程序员内点事

Java MySQL

财务分析与主要的模型

松子(李博源)

微软苏州集体抵制来自阿里、华为的跳槽者:请停止你的“奋斗逼”行为!网友:看到 955 不加班的公司名单,我酸了

程序员生活志

加班 程序员生活 996

架构师第九周作业

傻傻的帅

架构师 课程作业

技术管理者带团队的几个实用技巧

Phoenix

团队管理 企业文化 团队 价值观

JVM系列之:JIT中的Virtual Call

程序那些事

Java JVM JIT

华为云GaussDB(DWS)内存知识点,你知道吗?

华为云开发者社区

数据库 数据 大数据处理 内存 华为云

初识分布式:MIT 6.284系列(一)

Kerwin

分布式 MIT 28天写作

云小课 | IPv4枯了,IPv6来了

华为云开发者社区

IP 公有云 虚拟私有云 华为云 虚拟化

在人工智能时代追逐的“后浪”

华为云开发者社区

AI 开发者 技术社区 程序员成长 华为云

《深度工作》学习笔记(3)

石云升

学习 深度工作 工作哲学

2021年全国大学生计算机系统能力大赛操作系统设计赛 技术报告会

2021年全国大学生计算机系统能力大赛操作系统设计赛 技术报告会

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