TypeScript 2.8引入条件类型
最新发布的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月下旬发布。
原文地址 http://www.infoq.com/cn/news/2018/04/typescript-2-8-conditional-types
.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com
TypeScript 2.8引入条件类型相关推荐
- 关于 typescript 里面的 分布式条件类型
1. 什么是分布式条件类型 非分布式: 操作作用于混合类型大家都有的成员, 也就是交集 分布式: 操作应用于混合类型里所有的成员, 也就是并集 代码演示 // 非分布式(操作只作用于共同成员) typ ...
- 使用TypeScript映射和条件类型使React组件更出色
by Deepu K Sasidharan 通过Deepu K Sasidharan 使用TypeScript映射和条件类型使React组件更出色 (Make your React component ...
- 在条件类型中使用 infer 关键字
在 TypeScript 中条件类型的用法是: T extends U ? X : Y 跟 JS 中的条件表达式一样,如果 extends 语句为真,则取X类型 ,反之得到Y类型 .我们这里把X称为条 ...
- [TypeScript] 编程实践之1: Google的TypeScript代码风格3:类型
TypeScript语言规范 3 类型 3.1 Any类型 3.2 基本类型 3.2.1 Number类型 3.2.2 Boolean类型 3.2.3 String类型 3.2.4 Symbol类型 ...
- 从 JavaScript 到 TypeScript 6 - Vue 引入 TypeScript
随着应用的庞大,项目中 JavaScript 的代码也会越来越臃肿,这时候许多 JavaScript 的语言弊端就会愈发明显,而 TypeScript 的出现,就是着力于解决 JavaScript 语 ...
- TS中的条件类型(ReturnType)
本偏介绍TS另一种高级类型-条件类型. 官方文档:https://www.typescriptlang.org/docs/handbook/2/conditional-types.html#distr ...
- 5.TypeScript入门之TS高级类型(class类)
上一章节:4.TypeScript入门之TS常用类型(3) Ⅳ.TypeScript高级类型 概述 TS中的高级类型有很多,重点学习以下高级类型: class类 类型兼容性 交叉类型 泛型和 keyo ...
- SAP MM初阶之ME12里为啥只能维护少量条件类型的价格?
SAP MM初阶之ME12里为啥只能维护少量条件类型的价格? 我们都知道,SAP采购模块里有采购信息记录主数据,可以在里面维护物料的采购价格,以及若干附加费的rate.这里维护好的采购价格,在创建采购 ...
- SAP MM 自定义条件类型出现在采购信息记录的'条件'界面里 ?
SAP MM 自定义条件类型出现在采购信息记录的'条件'界面里 ? 我在SAP系统里复制某个标准的采购条件类型,创建了一个新的自定义条件类型ZC05,并将其分配采购定价过程RM0000. 结果却出现一 ...
最新文章
- 计算机软件属于输入还是输出,计算机基本输入输出系统是什么意思(基本输入输出系统简介)...
- Linux / 设置和查看环境变量的方法
- ios oc数组转换为c语言数组,iOS中将数组作为参数传递给服务器
- 神经网络算法的相关知识
- 【深度学习】mask_rcnn训练自己的数据集以及模型使用(实践结合GitHub项目)
- $python日期和时间的处理
- 数据分析--商业报告实例
- spring data for mongo
- 最新可用双端美化版在线音乐播放器网站源码
- 系列学习 Gateway 之第 5 篇 —— 搭建高可用网关(完结)
- 美化Hexo 个人博客
- matlab距离变换,图像处理之距离变换
- 【JavaBigDecimal练习】利用BigDecimal精确计算欧拉数
- Linux学习(一)初识Linux(适合萌懂阶段)
- 小波变换 python MITBIH数据库 基线漂移去噪
- 云米发布上市后首份财报:非GAAP净利3875万 同比增36%
- 苹果笔记本右键怎么按_苹果笔记本哪款性价比最高,系统怎么样,谢谢 ?
- 计算机科学与技术导论小报,电子信息科学与技术专业十大最好专业
- 512_盟德插件googleplayservice
- Mac电脑应用程序无法打开
热门文章
- 用sniffer技术盗取电话银行密码
- .NET6之MiniAPI(三十):结束篇(附链接)
- 在 ASP.NET Core 中使用托管服务实现后台任务
- 万箭齐发!COSCon' 21深圳分会场闪亮登场!
- .Net Core with 微服务 - 架构图
- .NET 差点不叫“.NET”?微软大牛爆料技术往事
- 70%以上程序员,不懂数据结构和算法!
- 如何在 C# 中使用 反射
- 从零开始实现 ASP.NET Core MVC 的插件式开发(九) - 如何启用预编译视图
- Firefox 18周岁