美文网首页让前端飞
关于自定义一个泛型工具

关于自定义一个泛型工具

作者: 虚拟J | 来源:发表于2021-07-18 15:36 被阅读0次

前景提要

axios 返回默认都是 Promise,所以官方的泛型工具 ReturnType 只能获取到 Promise 的实例,而我想要直接获取返回 Promise 接收的入参的类型,就需要自己手动写一个泛型工具了。

主要还是为了减少代码中 type 的非必要的导入导出,让代码简洁一点。

泛型的一些基础知识
  • 泛型中可以使用类似三元运算的条件类型
type IsString <S> = S extends string ? true : false;
IsString <'字符串'>; // true
  • infer 关键字

在条件类型中使用 infer 来获取类型入参的组成部分。(类似于声明性地引入了一个新的泛型类型变量)

type Chestnut<T> = T extends (infer C)[] ? C : never;
type isNumber = Chestnut<number[]>; // number

自定义泛型工具

先看一下 ReturnType 的定义:

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

然后按照这个改造一下:

type ReturnPromiseType<T extends (...args: any) => any> = T extends (
  ...args: any
) => infer R
  ? R extends Promise<infer PR>
    ? PR
    : any
  : any;

后面想到一个更简洁的写法:

type ReturnPromiseType<T extends (...args: any) => any> = T extends (
  ...args: any
) => Promise<infer PR>
  ? PR
  : ReturnType<T>;

最后

最后,只要在声明文件(以 .d.ts 为后缀的文件)中声明一下就好了。

declare global {
  //......代码
}

参考链接:
https://www.typescriptlang.org/docs/handbook/2/conditional-types.html

相关文章

  • 探秘 Java 中的泛型(Generic)

    本文包括:JDK5之前集合对象使用问题泛型的出现泛型应用泛型典型应用自定义泛型——泛型方法自定义泛型——泛型类泛型...

  • Web笔记-基础加强

    泛型高级应用 自定义泛型方法 自定义泛型类 泛型通配符? 泛型的上下限 泛型的定义者和泛型的使用者 泛型的定义者:...

  • Java泛型

    参考:Java知识点总结(Java泛型) 自定义泛型类 自定义泛型接口 非泛型类中定义泛型方法 继承泛型类 通配符...

  • 关于自定义一个泛型工具

    前景提要 axios 返回默认都是 Promise,所以官方的泛型工具 ReturnType 只能获取到 Prom...

  • 008-自定义泛型,Collections

    自定义泛型 泛型类 代码实现 测试 泛型接口 代码实现 泛型方法 代码演示 测试 泛型上下边界 Collectio...

  • JAVA范型<? extends __> <

    目录 一. 泛型概念的提出(为什么需要泛型)? 二.什么是泛型? 三.自定义泛型接口、泛型类和泛型方法 四.类型通...

  • java泛型

    泛型 作用:强制类型检查 自定义泛型 泛型类 泛型接口 给个github follow me的链接,上面有很多初学...

  • Kotlin泛型 (4)泛型接口

      自定义泛型接口和自定义泛型类声明方式完全一样。以下是对上一章节泛型类代码的修改,配合使用泛型接口实现队列功能。...

  • 泛型

    自定义泛型:就是一个数据类型的占位符或者是一个数据类型的变量。 方法上自定义泛型: 在泛型中不能使用基本数据类型,...

  • 泛型,枚举

    泛型的用处 将运行时的异常提前至了编译时 避免了无谓的强制类型转换 自定义泛型 自定义泛型就是一个数据类型的占位符...

网友评论

    本文标题:关于自定义一个泛型工具

    本文链接:https://www.haomeiwen.com/subject/mifapltx.html