最新发布的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引入条件类型相关推荐

  1. 关于 typescript 里面的 分布式条件类型

    1. 什么是分布式条件类型 非分布式: 操作作用于混合类型大家都有的成员, 也就是交集 分布式: 操作应用于混合类型里所有的成员, 也就是并集 代码演示 // 非分布式(操作只作用于共同成员) typ ...

  2. 使用TypeScript映射和条件类型使React组件更出色

    by Deepu K Sasidharan 通过Deepu K Sasidharan 使用TypeScript映射和条件类型使React组件更出色 (Make your React component ...

  3. 在条件类型中使用 infer 关键字

    在 TypeScript 中条件类型的用法是: T extends U ? X : Y 跟 JS 中的条件表达式一样,如果 extends 语句为真,则取X类型 ,反之得到Y类型 .我们这里把X称为条 ...

  4. [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类型 ...

  5. 从 JavaScript 到 TypeScript 6 - Vue 引入 TypeScript

    随着应用的庞大,项目中 JavaScript 的代码也会越来越臃肿,这时候许多 JavaScript 的语言弊端就会愈发明显,而 TypeScript 的出现,就是着力于解决 JavaScript 语 ...

  6. TS中的条件类型(ReturnType)

    本偏介绍TS另一种高级类型-条件类型. 官方文档:https://www.typescriptlang.org/docs/handbook/2/conditional-types.html#distr ...

  7. 5.TypeScript入门之TS高级类型(class类)

    上一章节:4.TypeScript入门之TS常用类型(3) Ⅳ.TypeScript高级类型 概述 TS中的高级类型有很多,重点学习以下高级类型: class类 类型兼容性 交叉类型 泛型和 keyo ...

  8. SAP MM初阶之ME12里为啥只能维护少量条件类型的价格?

    SAP MM初阶之ME12里为啥只能维护少量条件类型的价格? 我们都知道,SAP采购模块里有采购信息记录主数据,可以在里面维护物料的采购价格,以及若干附加费的rate.这里维护好的采购价格,在创建采购 ...

  9. SAP MM 自定义条件类型出现在采购信息记录的'条件'界面里 ?

    SAP MM 自定义条件类型出现在采购信息记录的'条件'界面里 ? 我在SAP系统里复制某个标准的采购条件类型,创建了一个新的自定义条件类型ZC05,并将其分配采购定价过程RM0000. 结果却出现一 ...

最新文章

  1. 计算机软件属于输入还是输出,计算机基本输入输出系统是什么意思(基本输入输出系统简介)...
  2. Linux / 设置和查看环境变量的方法
  3. ios oc数组转换为c语言数组,iOS中将数组作为参数传递给服务器
  4. 神经网络算法的相关知识
  5. 【深度学习】mask_rcnn训练自己的数据集以及模型使用(实践结合GitHub项目)
  6. $python日期和时间的处理
  7. 数据分析--商业报告实例
  8. spring data for mongo
  9. 最新可用双端美化版在线音乐播放器网站源码
  10. 系列学习 Gateway 之第 5 篇 —— 搭建高可用网关(完结)
  11. 美化Hexo 个人博客
  12. matlab距离变换,图像处理之距离变换
  13. 【JavaBigDecimal练习】利用BigDecimal精确计算欧拉数
  14. Linux学习(一)初识Linux(适合萌懂阶段)
  15. 小波变换 python MITBIH数据库 基线漂移去噪
  16. 云米发布上市后首份财报:非GAAP净利3875万 同比增36%
  17. 苹果笔记本右键怎么按_苹果笔记本哪款性价比最高,系统怎么样,谢谢 ?
  18. 计算机科学与技术导论小报,电子信息科学与技术专业十大最好专业
  19. 512_盟德插件googleplayservice
  20. Mac电脑应用程序无法打开

热门文章

  1. 用sniffer技术盗取电话银行密码
  2. .NET6之MiniAPI(三十):结束篇(附链接)
  3. 在 ASP.NET Core 中使用托管服务实现后台任务
  4. 万箭齐发!COSCon' 21深圳分会场闪亮登场!
  5. .Net Core with 微服务 - 架构图
  6. .NET 差点不叫“.NET”?微软大牛爆料技术往事
  7. 70%以上程序员,不懂数据结构和算法!
  8. 如何在 C# 中使用 反射
  9. 从零开始实现 ASP.NET Core MVC 的插件式开发(九) - 如何启用预编译视图
  10. Firefox 18周岁