TypeScript中infer关键字的具体使用

 更新时间:2025年06月04日 10:45:01   作者:aiguangyuan  
infer 是 TypeScript 中的高级类型关键字,主要用于条件类型中推断类型,本文就来介绍TypeScript中infer关键字的使用,具有一定的参考价值,感兴趣的可以了解一下

infer 是 TypeScript 中的高级类型关键字,主要用于条件类型中推断类型。它允许我们在条件类型的 extends 子句中声明一个类型变量,然后在该条件类型的 true 分支中使用这个推断出的类型。

1. 基本语法

type SomeType<T> = T extends infer U ? U : never;

2. 主要用途

1. 从复杂类型中提取子类型;

2. 实现类型解构;

3. 创建更灵活的工具类型;

3. 常见示例

3.1. 提取函数返回类型

type ReturnType<T> = T extends (...args: any[]) => infer R ? R : never;

function foo(): number {
  return 42;
}

type FooReturn = ReturnType<typeof foo>; // number

3.2. 提取数组/元组元素类型

type ElementType<T> = T extends (infer U)[] ? U : never;

type StrArray = string[];
type StrElement = ElementType<StrArray>; // string

3.3. 提取数组/元组元素类型

type UnpackPromise<T> = T extends Promise<infer U> ? U : T;

type PromiseNumber = Promise<number>;
type NumberType = UnpackPromise<PromiseNumber>; // number

3.4. 提取函数参数类型

type Parameters<T> = T extends (...args: infer P) => any ? P : never;

function bar(a: string, b: number): void {}
type BarParams = Parameters<typeof bar>; // [string, number]

3.5. 提取构造函数实例类型

type InstanceType<T> = T extends new (...args: any[]) => infer R ? R : any;

class MyClass {}
type MyInstance = InstanceType<typeof MyClass>; // MyClass

3.6. 实现类型反转(将元组类型顺序反转)

type Reverse<T> = T extends [infer First, ...infer Rest] 
  ? [...Reverse<Rest>, First] 
  : T;

type Original = [1, 2, 3];
type Reversed = Reverse<Original>; // [3, 2, 1]

4. 注意事项

1. infer 只能在条件类型的 extends 子句中使用;

2. 同一类型变量可以在多个位置进行 infer,但必须推断出相同的类型;

3. 如果无法推断出类型,则条件类型会返回 never 或指定的默认类型;

infer 是 TypeScript 类型编程中非常强大的工具,它使得类型操作更加灵活和强大,特别是在创建复杂工具类型时非常有用。

到此这篇关于TypeScript中infer关键字的具体使用的文章就介绍到这了,更多相关TypeScript infer关键字使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JavaScript如何实现精准倒计时

    JavaScript如何实现精准倒计时

    这篇文章主要为大家详细介绍了JavaScript如何实现精准倒计时功能,文中的示例代码简洁易懂,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-02-02
  • JS对象与json字符串相互转换实现方法示例

    JS对象与json字符串相互转换实现方法示例

    这篇文章主要介绍了JS对象与json字符串相互转换实现方法,结合实例形式分析了js对象与json字符串相互转换的相关操作技巧与注意事项,需要的朋友可以参考下
    2018-06-06
  • JS奇技之利用scroll来监听resize详解

    JS奇技之利用scroll来监听resize详解

    这篇文章主要给大家介绍了JS奇技之利用scroll来监听resize的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-06-06
  • javascript实现网页端解压并查看zip文件

    javascript实现网页端解压并查看zip文件

    昨天给大家分享了在网页端使用zip.js插件实现在线压缩文件的代码,今天给大家分享一下javascript实现网页端解压并查看zip文件的方法,非常的实用,有需要的小伙伴可以参考下
    2015-12-12
  • require.js中的define函数详解

    require.js中的define函数详解

    这篇文章主要给大家介绍了关于require.js中define函数的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用require.js中的define函数具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-07-07
  • 详解Bootstrap网格垂直和水平对齐方式

    详解Bootstrap网格垂直和水平对齐方式

    网格在网页布局中是一个重点和难点,布局是网页设计的起点和基础,本文主要介绍了Bootstrap网格垂直和水平对齐方式,感兴趣的可以了解一下
    2021-07-07
  • Js日期选择自动填充到输入框(界面漂亮兼容火狐)

    Js日期选择自动填充到输入框(界面漂亮兼容火狐)

    本文为大家写了个很漂亮、兼容火狐的Js日期选择,自动填充到输入框,代码如下,有需要的朋友可以参考下
    2013-08-08
  • 纯JS实现只能输入数字的简单代码

    纯JS实现只能输入数字的简单代码

    本文给大家分享一段简单的代码基于js实现只能输入数字的方法,非常不错,具有参考借鉴价值,需要的的朋友参考下吧
    2017-06-06
  • 跟我学习javascript的垃圾回收机制与内存管理

    跟我学习javascript的垃圾回收机制与内存管理

    跟我学习javascript的垃圾回收机制与内存管理,感兴趣的小伙伴们可以参考一下
    2015-11-11
  • js验证整数加保留小数点的简单实例

    js验证整数加保留小数点的简单实例

    这篇文章主要介绍了js验证整数加保留小数点的简单实例,有需要的朋友可以参考一下
    2013-12-12

最新评论