使用 Ramda 和 Typescript 的 Curry 泛型函数
Curry generic function with Ramda and Typescript
我有一个通用函数:
function hello<T>(n: number, s: string, thing: T): Array<T> {
return [thing]
}
const result = hello(1, 'string arg', 'generic arg')
result
具有预期的类型 string[]
。
但是如果我咖喱它:
function hello<T>(n: number, s: string, thing: T): Array<T> {
return [thing]
}
const fun1 = curry(hello)(1, 'string arg')
const result = fun1('generic arg')
result
现在有类型 unknown[]
.
如何在保持类型的同时在 Ramda 中柯里化泛型函数?我正在使用 Ramda 0.27.1
带有3个参数的R.curry
的签名是:
curry<T1, T2, T3, TResult>(fn: (a: T1, b: T2, c: T3) => TResult): CurriedFunction3<T1, T2, T3, TResult>;
如您所见,您需要手动键入柯里化函数 (codesandbox):
function hello<T>(n: number, s: string, thing: T): Array<T> {
return [thing];
}
const fun1 = curry<number, string, string, string[]>(hello)(1, 'string arg');
const result = fun1('generic arg');
console.log(result);
我有一个通用函数:
function hello<T>(n: number, s: string, thing: T): Array<T> {
return [thing]
}
const result = hello(1, 'string arg', 'generic arg')
result
具有预期的类型 string[]
。
但是如果我咖喱它:
function hello<T>(n: number, s: string, thing: T): Array<T> {
return [thing]
}
const fun1 = curry(hello)(1, 'string arg')
const result = fun1('generic arg')
result
现在有类型 unknown[]
.
如何在保持类型的同时在 Ramda 中柯里化泛型函数?我正在使用 Ramda 0.27.1
带有3个参数的R.curry
的签名是:
curry<T1, T2, T3, TResult>(fn: (a: T1, b: T2, c: T3) => TResult): CurriedFunction3<T1, T2, T3, TResult>;
如您所见,您需要手动键入柯里化函数 (codesandbox):
function hello<T>(n: number, s: string, thing: T): Array<T> {
return [thing];
}
const fun1 = curry<number, string, string, string[]>(hello)(1, 'string arg');
const result = fun1('generic arg');
console.log(result);