TypeScript 3.7下如何基于已有类型T生成对应函数值的泛型类型U<T>
实现方案
TS 3.7 原生支持基础映射类型,无需高版本的key重映射特性,直接按如下方式定义即可,仅需传入T一个泛型参数:
type U<T extends object> = { [K in keyof T]: (x: T[K]) => T[K] };
使用验证
针对你给出的I1接口,可直接使用U<I1>得到你预期的类型结构:
interface I1 { a: number; b: Date; } // 示例赋值,类型会自动推导校验 const sample: U<I1> = { a: (num) => num * 2, // num自动推导为number,返回值必须为number b: (date) => new Date(date.setDate(date.getDate() + 1)) // date自动推导为Date,返回值必须为Date }
你之前的写法将K、V单独声明为了泛型入参,所以使用时需要手动传入这两个类型参数,把键的遍历逻辑放到映射类型内部处理就可以避免这个问题。
内容的提问来源于stack exchange,提问作者OliverRadini
相关产品推荐
相关产品推荐

