Typescript — infer

本文介绍了TypeScript中的infer关键字,包括其在条件语句中推断类型的作用,内置的映射类型如infer T用于提取函数返回值和构造函数参数类型。通过示例展示了如何使用infer实现tuple转union和union转intersection等高级用法,并讨论了一道LeetCode的TypeScript面试题,涉及函数类型的筛选和infer的应用。
摘要由CSDN通过智能技术生成

Typescript — infer

infer

这篇讲的很详细可以参考一波Using TypeScript infer Like a Pro | by Bytefer | Level Up Coding

介绍

infer 最早出现在此 PR 中,表示在 extends 条件语句中待推断的类型变量。
简单示例如下:

type ParamType<T> = T extends (arg: infer P) => any ? P : T;

在这个条件语句 T extends (arg: infer P) => any ? P : T 中,infer P 表示待推断的函数参数。
整句表示为:如果 T 能赋值给 (arg: infer P) => any,则结果是 (arg: infer P) => any 类型中的参数 P,否则返回为 T

interface User {
   
  name: string;
  age: number;
}

type Func = (user: User) => void;

type Param = ParamType<Func>; // Param = User
type AA = ParamType<string>; // string

内置类型

在 2.8 版本中,TypeScript 内置了一些与 infer 有关的映射类型:

  • 用于提取函数类型的返回值类型:
  type ReturnType<T> = T extends (...args: any[]) => infer P ? P : any;

相比于文章开始给出的示例,ReturnType<T> 只是将 infer P 从参数位置移动到返回值位置,因此此时 P 即是表示待推断的返回值类型。

  type Func = () => User;
  type Test = ReturnType<Func>; // Test = User
  • 用于提取构造函数中参数(实例)类型:
    一个构造函数可以使用 new 来实例化,因此它的类型通常表示如下:
  type Constructor = new (...args: any[]) => any;

infer 用于构造函数类型中,可用于参数位置 new (...args: infer P) => any; 和返回值位置 new (...args: any[]) => infer P;
因此就内置如下两个映射类型:

  // 获取参数类型
  type ConstructorParameters&l
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值