写点什么

TypeScript 2.8 引入条件类型

2018 年 4 月 11 日

看新闻很累?看技术新闻更累?试试下载 InfoQ 手机客户端,每天上下班路上听新闻,有趣还有料!

最新发布的 TypeScript 2.8 包含了若干主要特性和一些问题修复,其中最为重要的是新增了条件类型,开发人员可以根据其他类型的特征为变量选择适当的类型。

条件类型最适合与泛型组合在一起使用。如果一个框架总是重复相同的选择性代码,就会变得很繁琐。JavaScript 可以在运行时根据具体值做出决策,与之类似,TypeScript 的条件类型可以根据其他类型的特征来做出决策。

TypeScript 团队给出了一个示例,使用更灵活的接口代替原先繁琐的 API:

原先:

复制代码
interface Id { id: number, /* other fields */ }
interface Name { name: string, /* other fields */ }
declare function createLabel(id: number): Id;
declare function createLabel(name: string): Name;
declare function createLabel(name: string | number): Id | Name;

替换为:

复制代码
type IdOrName<T extends number | string> =   T extends number ? Id : Name;
declare function createLabel<T extends number | string>(idOrName: T):   T extends number ? Id : Name;

条件类型提供了 infer 关键字来推断类型,用于替代手动获取类型。TypeScript 为此提供了一个示例,他们创建了一个叫作 Flatten 的类型,用于将数组转成他们需要的元素类型:

type Flatten<T> = T extends any[] ? T[number] : T;如果使用关键字 infer 就可以将上面的代码简化成:

type Flatten<T> = T extends Array<infer U> ? U : T;条件类型也为联合类型带来了改进,现在可以根据条件类型来分配联合类型。

另外,TypeScript 还增加了若干新的类型别名(Exclude、Extract、InstanceType、NonNullable、ReturnType),这些类型别名也是基于条件类型的。TypeScript 团队因此可以更高效地直接往语言里添加额外的类型模式。

TypeScript 2.8 还增加了一个新的–emitDeclarationOnly标记,用于分离 TypeScript 定义文件和 JavaScript 文件,从而改进了使用 Babel 7 转换 TypeScript 代码的过程。

该版本还为 React 和 JSX 用户带来了一些有关编译注释和 JSX 模块解析的改进。

现在可以使用-operator或新的 Required 类型来移除标识符。

其他小改进还包括:用于清理 ES 模块导入的辅助工具和对未初始化类属性检查的改进。

总体来说,TypeScript 2.8 带来了若干改进,大部分都是基于新引入的条件类型,现在可以定义更复杂的类型。

可以通过npm install -g typescript来安装最新的 TypeScript 2.8,或者直接从 GitHub 上下载。TypeScript 2.9 正在开发中,预计 5 月下旬发布。

查看英文原文 TypeScript 2.8 Release Includes Conditional Types

2018 年 4 月 11 日 19:002694
用户头像

发布了 731 篇内容, 共 375.2 次阅读, 收获喜欢 1878 次。

关注

评论

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

春招失利,狂刷200+面试文档,终斩获头条,阿里offer~(Java岗)

Crud的程序员

Java spring 架构 编程语言

ubuntu64位搭建OpenVINO系统(上篇)

IT蜗壳-Tango

5月日更

🔎【Java 源码探索】深入浅出的分析ClassLoader

李浩宇/Alex

Java ClassLoader 类加载器 5月日更 双亲委托模型

别再说什么渗透学到好 牢饭少不了之类的话了。你,够格吗?(渗透tp技巧)

Machine Gun

Java Python 网络安全 信息安全 渗透测试

Java岗熬了6年,终成P8,只因搞懂了这七件事

Java架构师迁哥

真香!阿里内部强推GC小册Github一夜爆火,JVM垃圾回收算法+实战一键搞定!

程序员小毕

Java 程序员 架构 面试 JVM

IDEA中request获取不到getParameter方法

anuyyy

javaWeb Request getParameter

iOS开发-60分钟入门

iOSer

ios iOS Document 移动开发 ios开发 iOS Developer

量化交易软件开发源码,马丁量化策略交易平台搭建app

WX13823153201

领域驱动设计101 - 值对象

luojiahu

领域驱动设计 DDD

模块 4 作业

鲲哥

挖洞经验|UEditor编辑器存储型XSS漏洞

Machine Gun

Java Python 网络安全 渗透测试 linux运维

接招吧!最强“高并发”系统设计 46 连问,分分钟秒杀一众面试者

你看起来很好吃

面试 高并发 Java 25 周年

TcaplusDB小知识 | 客户端及常用命令

tcaplus

数据库 游戏 TcaplusDB

喜讯!腾讯团队Redis技术笔记,下载量已突破30W;附下载方式

Java架构师迁哥

金三银四旗开得胜!春招字节正式批4面,顺利拿到offer

云流

Java 程序员 架构 面试

探索科技手段下的食品安全,区块链冷链追溯平台建设解决方案

源中瑞-龙先生

iOS打包签名,你真的懂吗

Geen练

ios 打包 签名 iOS Developer

第一次凡尔赛,字节跳动3面+腾讯6面一次过,谈谈我的大厂面经

Java架构师迁哥

Hive|如何避免数据倾斜

数据社

hive 5月日更

解析如程688免费住民宿的商业模式

石云升

商业模式 5月日更

fil的gas费降低了吗?fil矿机挖币最新消息?

v:IPFS456

fil的gas费降低了吗? fil矿机挖币最新消息?

Github上“Java面试考点大全”被我扒下来了,20+互联网公司,应有尽有

Java架构师迁哥

Spring 是什么?如何去了解spring?

???

Java spring 程序员 编程语言 spring M

废物,我TMD一个985却斗不过专科生(大厂java开发2年被裁)

Java架构师迁哥

Mysql InnoDB使用的锁

water

太顶了!阿里大牛离职带出来的这份“Java架构核心宝典”学习笔记,差距不是一点点

云流

Java 程序员 架构 面试

架构实战营 - 模块 5- 作业

泄矢的呼啦圈

架构实战营

由云入端:一场云计算巨头的闯关游戏

脑极体

架构师实战营-模块4-设计千万级学生管理系统的考试试卷存储方案

吴建中

架构实战营

记录:28天拿到字节offer的全过程(Java岗)

Java架构师迁哥

云原生场景下企业API 网关选型及落地实践

云原生场景下企业API 网关选型及落地实践

TypeScript 2.8引入条件类型-InfoQ