I'm new to functional programming but wanna learn best practices.
What is the proper fp-ts way to convert array into object?
(items: Item[], keyGetter: (i: Item) => Key) => Record<Key, Item>
I use my own not fp-ts implementation so far:
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>);
};