TypeScript如何获取函数返回值类型实现自动推导泛型的管道功能
你当前的泛型定义逻辑本身就支持自动推导,只需要补全函数实现即可正常使用,注意箭头函数泛型后加逗号规避部分TS环境下的JSX语法冲突即可,完整可用实现如下:
type FirstFunc<T> = () => T; type Pipeline<T> = ((obj: T) => T)[] const objPipeLine = <T,>(firstFunc: FirstFunc<T>, pipeline: Pipeline<T>): T => { let current = firstFunc() for (const process of pipeline) { current = process(current) } return current }
使用时无需手动传入泛型,TS会自动从第一个函数的返回值推断T的类型,并约束Pipeline数组中所有函数的入参、返回值类型必须和T一致:
// 第一个函数返回类型为 { name: string; age: number } const init = () => ({ name: "李四", age: 18 }) const result = objPipeLine(init, [ // 此处入参user自动被推导为 { name: string; age: number } 类型 user => ({ ...user, age: user.age + 2 }), user => ({ ...user, name: `${user.name}(已认证)` }), // 下面的代码会直接触发TS类型错误,因为返回值多了不存在的gender属性 // user => ({ ...user, gender: "男" }) ])
内容的提问来源于stack exchange,提问作者Tramonta
相关产品推荐
相关产品推荐

