【发布时间】:2016-03-13 20:30:53
【问题描述】:
我对 TypeScript 中的柯里化函数有以下定义:
interface Curried2<A, B, Z> {
(_0: A): (_0: B) => Z;
(_0: A, _1: B): Z;
}
我有以下函数应该接受一个函数(curried 与否):
function apply<T, U>(f: (_0: T) => U, x: T): U {
return f(x);
}
现在,给定
let curried: Curried2<number, boolean, string> = ...
以下作品(如预期):
apply<number, (_0: boolean) => string>(curried, 4);
但 TypeScript 无法自行推断类型:
apply(curried, 4);
(即使() 只有一个重载,它采用单个值。)它抱怨:
'Curried2它已经正确推断出' 类型的参数不可分配给'(_0: number) => string' 类型的参数...
T,但推断出U 是 string。为什么是这样?在这种情况下,我该怎么做才能使类型推断对我有用(因为明确指定 T 和 U 对于我的口味来说太冗长了)?
提前致谢!
【问题讨论】: