当管道数据的类型不同时,我会收到键入错误。如何满足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)
)