【发布时间】:2021-07-01 21:05:45
【问题描述】:
我是函数式编程的新手,但想学习最佳实践。
将数组转换为对象的正确 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>);
};
【问题讨论】:
-
请提供可重现的例子
-
什么例子?我的 arrayToRecord 函数的 fp-ts 等效?这就是IDK如何实现的东西????
-
TIdentifier 示例,isDEfined。您的代码不可重现
-
我明白了,对不起。我已经扩展了我的例子????
-
item as unknown as T2不是很实用:-) 如果你真的需要这个,我建议你重载你的函数为(items: Key[]) => Record<Key, Key>。
标签: typescript functional-programming fp-ts