Skip to content
🔥 更新时间:

获取函数返回类型

🎯 题目描述

不使用 ReturnType 实现 TypeScript 的 ReturnType<T> 泛型。

例如:

ts
const fn = (v: boolean) => {
  if (v) return 1;
  else return 2;
};

type a = MyReturnType<typeof fn>; // 应推导出 "1 | 2"

🔍 分析

核心是利用 推断匹配的套路,只是推断的位置不同。

🛠️ 题解

ts
type MyReturnType<T> = T extends (...args: any[]) => infer R ? R : never;
// 下面的写法是错误的,因为限制了不能有参数,当函数有参数时,会走 false 逻辑,返回 never
// type MyReturnType<T> = T extends () => infer R ? R : never;

// number
type Test = MyReturnType<(a: number) => number>;

这里需要注意的,是参数的写法,因为并不限制有多少参数,也不限制参数的类型,所以可能会理所当然的认为不写参数就可以了,但是实际上不写参数就对应着没有参数,那么就会导致类型判断出错,走了 false 逻辑。

💡 知识点

  1. 推断匹配可以用在函数的返回类型上
  2. 对函数的入参没有限制时,不能为空,可以写 ...args: any[] 或者 ...args: unknown[]

Contributors

The avatar of contributor named as fengzebing fengzebing

Changelog

本站访客数 人次 本站总访问量