管道/组合函数时出现TypeScript键入错误



当管道数据的类型不同时,我会收到键入错误。如何满足TypeScript?

const square = (x: number) => x * x
console.log(
R.pipe(
R.add, // two values
square // one value
)(1, 2)
)

[tsserver 2769][E]没有与此调用匹配的重载。最后一次过载给出以下错误。

类型为"(x:number(=>数字'不可分配给类型'的参数(x:(b:number(=>数字(=>数字'。

参数"x"one_answers"x"的类型不兼容。

类型'(b:number(=>number"不可分配给类型"number"。

我安装了@types/ramda

这是一个不令人满意的解决方案,但它确实有效。我暂时用一个更简单类型的本地定义函数取代了R.add

const add = (a: number, b: number) => a + b
const square = (x: number) => x * x
console.log(
R.pipe(
add, // two values
square // one value
)(1, 2)
)

观察到R.pipe在原始非编译示例(<number, number>(中的实例化与这个简化示例(<number, number, number, number>(相比,我意识到TypeScript错误地选择了R.add的当前重载,并因此而感到困惑。如果我们用正确的总arity显式实例化R.pipe,编译器会做出正确的决定:

const square = (x: number) => x * x
console.log(
R.pipe<number, number, number, number>(
R.add, // two values
square // one value
)(1, 2)
)

最新更新