【发布时间】:2019-07-30 16:21:00
【问题描述】:
我对具有未知参数的函数作为参数的通用函数有一些问题。
export const inject = <I,V>(fn:<U>(input?:U) => V, resolveWithPayload: boolean, resolveArgs?: I) => <R>(payload:R):R => {
resolveWithPayload ? fn(payload) : resolveArgs ? fn(resolveArgs) : fn();
return payload;
};
const fn = (value:number):number => {
propertyToMutate = value;
return propertyToMutate;
}
const res =_fish.inject(fn,false,60)(50);
but calling it ends with :
'(value: number) => number' 类型的参数不可分配给 '(input?: U) => number' 类型的参数。参数类型 “值”和“输入”不兼容。类型“U”不可分配 输入“数字”。
如果我以这种方式更改代码:
export const inject = <I,V,U>(fn:(input?:U) => V, resolveWithPayload: boolean, resolveArgs?: I) => <R>(payload:R):R => {
resolveWithPayload ? fn(payload) : resolveArgs ? fn(resolveArgs) : fn();
return payload;
};
它以注入本身的类型定义错误结束,例如:
TS2345:“R”类型的参数不可分配给类型参数 'U'。
TS2345:“I”类型的参数不能分配给类型参数 'U'。
如果我不知道“fn”的输入类型,我该怎么办?
谢谢
【问题讨论】:
标签: typescript generics