Ramda compose函数在typescript中显示编译错误



我正在尝试编写groupBymapObjIndexed,但typescript在groupBy函数上显示编译错误。

const optionMapper = ( options: Option[], id ) => {
const option = R.head( options );
return {
name: option.name,
group: option.group,
count: options.length,
....
....
};
};
R.compose(
R.mapObjIndexed( optionMapper ),
R.groupBy( option =>  option.id )
)( options );

编译错误可以像一样从德语翻译过来

No function overload matched this call. 
The Argument of Type "[Record<never, unknown[]>]" can not be assigned to the Type "[...func: ((a: any) => any)[], f7: (a: unknown) => unknown, f6: (a: unknown) => unknown, f5: (a: unknown) => unknown, f4: (a: unknown) => unknown, f3: (a: unknown) => unknown, f2: (a: unknown) => unknown, f1: (...args: any[]) => unknown]" nicht zugewiesen werden.

您需要为传递给组合函数的数据添加相关类型,以及其中每个函数的输出。例如:

const fn = compose<
[Option[]], // A tuple of passed arguments to the function
Record<string, Option[]>, // the output of the groupBy
Record<string, OptionCounted> // the output of mapObjIndexed and the entire function
>(mapObjIndexed(optionMapper), groupBy(prop('id')));

工作示例(沙箱(:

import { head, compose, groupBy, prop, mapObjIndexed } from 'ramda';
interface Option {
id: string;
name: string;
}
interface OptionCounted extends Option {
count: number;
}
const optionMapper = (options: Option[], id: string) => {
const option = head(options);
return {
id,
name: option.name,
count: options.length
};
};
const fn = compose<
[Option[]],
Record<string, Option[]>,
Record<string, OptionCounted>
>(mapObjIndexed(optionMapper), groupBy(prop('id')));
const options = [
{ id: 'a', name: 'a' },
{ id: 'b', name: 'b' },
{ id: 'b', name: 'b' },
{ id: 'a', name: 'a' },
{ id: 'c', name: 'c' }
];
const result = fn(options);
console.log(result);

相关内容

最新更新