我是函数式编程的新手,但想学习最佳实践。
将数组转换为对象的正确 fp-ts 方法是什么?
(items: Item[], keyGetter: (i: Item) => Key) => Record<Key, Item>
到目前为止,我使用自己的非 fp-ts 实现:
function isDefined<T>(value: T): value is Exclude<T, undefined> {
return value !== undefined;
}
type TIdentifier = string | number;
export const arrayToRecord = <T1, T2 extends TIdentifier = string>(
arr: T1[],
getKeyName?: (item: T1) => T2
): Record<T2, T1> => {
const hasKeyNameGetter = isDefined(getKeyName);
return arr.reduce((acc, item) => {
acc[
hasKeyNameGetter ? (getKeyName as (item: T1) => T2)(item) : ((item as unknown) as T2)
] = item;
return acc;
}, {} as Record<T2, T1>);
};