如何从对象字面量中f1的返回类型推断f2的参数类型?
实现从f1返回值推断f2参数类型的方案
你当前的写法里,直接给变量a标注A类型时,TypeScript会直接使用泛型R的默认值any,不会从f1的返回值反向推导R的类型,所以f2的参数x会是any。要实现自动推断,最简洁的方案是用辅助推断函数,利用TypeScript对函数参数的泛型推导能力:
type A<R = any> = { f1: () => R f2: (x: R) => void } // 辅助函数,让TS自动推断泛型R const createA = <R>(obj: A<R>) => obj; // 使用辅助函数,无需显式指定A<string> const a = createA({ f1: () => "", f2: (x) => {} // x被自动推断为string类型 });
原理说明
当调用createA时,TypeScript会分析传入对象中f1的返回值类型,自动确定泛型R的类型,进而让f2的参数x同步匹配该类型。而直接给变量标注A类型的方式,TS会先锁定R为默认的any,不会再从对象属性反向推导,所以无法实现你要的效果。
如果不想额外定义辅助函数,目前TypeScript没有原生支持在变量类型注解场景下反向推导泛型参数的语法,因此辅助函数是最直接可行的方案。
内容的提问来源于stack exchange,提问作者Franck Wolff
相关产品推荐
相关产品推荐

