泛型函数参数与返回类型不同时的类型签名定义问题
如何定义参数与返回类型不同的函数参数类型签名?
你遇到的错误根源在于把函数参数funct2定义成了泛型函数——这意味着funct2需要支持任意的输入类型T和返回类型K,但你传入的convertFromDate是固定输入Date、输出number的非泛型函数,两者类型不匹配。
正确的做法是将funct1本身定义为泛型函数,让泛型参数T和K由传入的funct2自动推导,而非要求funct2自己是泛型函数。
修正后的代码示例
首先修改funct1的类型定义:
const funct1 = <T, K>(obj1: Object, funct2: (a: T) => K, obj2: any) => { // 你的业务逻辑 };
然后调用时,TypeScript会自动根据convertFromDate的类型推导T=Date、K=number,不会再报错:
const convertFromDate = (obj: Date): number => { return obj.valueOf() / 1000; }; // 正常调用,无类型错误 funct1(d1, convertFromDate, Date);
进阶优化(可选)
如果obj2和T存在关联(比如obj2是T的构造函数),可以进一步约束类型,让定义更严谨:
const funct1 = <T, K>(obj1: Object, funct2: (a: T) => K, obj2: new () => T) => { // 此时obj2被限制为T的构造函数,避免传入无关类型 };
内容的提问来源于stack exchange,提问作者Liumx31
相关产品推荐
相关产品推荐

