infer

extends 和三元运算符组合使用,用于推断某个复杂类型的部分,简单的说,就是用来推导泛型参数

使用规则

type ParamsArray<T> = T extends Array<infer P> ? P : T;
  1. inter 只能出现在 extends 关键字的右侧;
  2. inter P 可以理解成数学上的未知数 x
  3. 其中 extends 关键字的作用,是用来判断 右边的类型 是否兼容 左边的泛型 T,如果兼容则返回 ? 后面的内容,否则返回 : 后面的内容。

示例一:

type ParamsArray<T> = T extends Array<infer P> ? P : T;type StrignArr = string[];
type Res1 = ParamsArray<StrignArr>; // stringtype NumberArr = Array<number>;
type Res2 = ParamsArray<NumberArr>; // numberinterface Person {name: string,age: number
}
type PersonList = Person[];
type Res3 = ParamsArray<PersonList>; // Person// 使用类型不匹配时,返回传入的泛型
type Res4 = ParamsArray<string>; // string

Array<infer P> 的类型是否能够兼容传入的泛型,如果兼容,则返回 P,也就是 Array 类型的泛型;如果不兼容,直接返回传入的泛型。

示例二:

type ParamsType<T> = T extends (params: infer P) => any ? P : T;type Func = (name: string) => void;
type Params = ParamsType<Func>; // string// 当参数个数对应不上时,类型也就匹配不上了。
type Func1 = (name: string, age: number) => void;
type Params1 = ParamsType<Func1>; // type Params1 = (name: string, age: number) => voidinterface IPerson {name: string,age: number,
}
type Func2 = (person: IPerson) => void;
type Params2 = ParamsType<Func2>; // IPerson

这里是作用于函数类型,如果预先定义的函数类型能够兼容传入的类型,则将函数第一个参数的类型返回。

TypeScript 之 infer相关推荐

  1. typescript_如何掌握高级TypeScript模式

    typescript by Pierre-Antoine Mills 皮埃尔·安托万·米尔斯(Pierre-Antoine Mills) 如何掌握高级TypeScript模式 (How to mast ...

  2. 学习TypeScript数据类型-从零到英雄

    It's all the rage these days in the world of web development - TypeScript.  I'd wager by now you hav ...

  3. 写给初中级前端的高级进阶指南(万字长文,建议收藏)

    前言 由于公众号文章不允许外链,需要跳转文中链接的同学可以在脚注里找到各个的资源链接,也可以通过点击阅读原文更加方便的跳转链接. 我曾经一度很迷茫,在学了 Vue.React 的实战开发和应用以后,好 ...

  4. 写给初中级前端的高级进阶指南(万字路线)

    前言 我曾经一度很迷茫,在学了 Vue.React 的实战开发和应用以后,好像遇到了一些瓶颈,不知道该怎样继续深入下去.相信这也是很多一两年经验的前端工程师所遇到共同问题,这篇文章,笔者结合自己的一些 ...

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

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

  6. 什么是TypeScript?为什么我要用它代替JavaScript? [关闭]

    本文翻译自:What is TypeScript and why would I use it in place of JavaScript? [closed] Closed . 已关闭 . This ...

  7. typescript 方法后面加感叹号_使用 TypeScript 模板字面类型

    介绍 在今天的早些时候,Anders Hejlsberg 在 TypeScript 的仓库中发了一个 Pull Request:Template string types and mapped typ ...

  8. typescript 怎么表示当前时间减一个月_TypeScript类型元编程:实现8位数的算术运算...

    失业中在 github 闲逛,看到有人用类型实现的一个4位虚拟机,为什么是4位呢,因为 TypeScript 的类型实例化深度有限制,没法实现太大的数字计算.说到用类型实现数字计算,一大堆邱奇数就冒出 ...

  9. typescript索引类型_TypeScript的索引类型与映射类型,以及常用工具泛型的实现

    相信现在很多小伙伴都在使用 TypeScript(以下简称 TS),在 TS 中除了一些常用的基本类型外,还有一些稍微高级一点的类型,这些就是我本次文章要讲的内容:索引类型与映射类型,希望小伙伴们看过 ...

  10. typescript get方法_使用 Typescript 构建类型安全的 Websocket 应用

    本文会通过一个简单的聊天室例子分享如何使用 Typescript 实现一个类型安全 Websocket 应用,在文章最后有 Github 项目地址.例子中的前端是使用 Angular 不过本文不会涉及 ...

最新文章

  1. python数据库框架_Python数据库及ORM框架对比选择
  2. 知识库建设的5个步骤
  3. 关于“数据可视化思考者”的8条军规
  4. 线性方程 最小二乘解 SVD分解
  5. 【大话设计模式】设计模式系统学习大合集
  6. python udp编程_Python UDP编程
  7. Macosx 安装 ionic 成功教程
  8. 排序算法 --- 希尔排序
  9. ORACLE Dataguard安装
  10. linux(windows,mac)下安装ta-lib
  11. Windows10使用Anaconda安装TensorFlow-GPU
  12. 利用大数据构建智能交通
  13. 【堆笔记】java堆(PriorityQueue)的相关操作
  14. Python3 爬虫之 Scrapy 核心功能实现(二)
  15. web.xml文件中的web-app元素 部署
  16. 重大网络教育计算机基础章节答案,网络教育计算机基础1答案
  17. 火车票放票时间 潜规则
  18. 遥感影像数据下载网站整理
  19. 一文带你了解MySQL的前世今生,架构,组成部分,特点,适用场景
  20. 百度搜索结果页链接地址即将升级

热门文章

  1. 骚操作——Word批量修改图片大小
  2. spring security中A granted authority textual representation is required
  3. leedcode.21合并两个有序链表
  4. 斗圣苍穹游戏代码(点关注,不迷路,还有更多c++小程序等着你)
  5. 趋势科技4月移动客户端病毒报告
  6. 视频编解码(一):ffmpeg编码H.264帧类型判断
  7. 中国电信CTWAP和CTNET已经融合
  8. DBA必备技能:数据库挂起时进行转储分析诊断案例
  9. 变量名和变量地址之间的关系
  10. 光电特性传感器实验台