使用 infer 封装通用类型工具

作者:xie392地址:https://v.douyin.com/ieQtm3cC/更新时间:2024-12-21

案例代码

1
type sum = (a:number, b: number) => number
2
type concat = (a:any[], b:any[] ) => any[]
3
4
// 类似于 ReturnType<T>
5
// infer 推断
6
type Return<T> = T extends (...args:any[]) => infer K ? K : T
7
8
let sumResult: ReturnType<sum> // number
9
let concatResult: Return<concat> // any[]
10
11
12
// 例子
13
type PromiseType<T> = T extends Promise<infer K> ? PromiseType<K> : T
14
type pt = PromiseType<Promise<Promise<string>>> // string