clean-redux
Version:
Utilities for implementing clean architecture using Redux
19 lines (15 loc) • 662 B
text/typescript
import "minimal-polyfills/Object.fromEntries";
import type { Reducer } from "@reduxjs/toolkit";
export function usecasesToReducer<Usecase extends { name: string; reducer: Reducer | null }>(
usecases: readonly Usecase[],
): RemoveNullProperties<{
[Key in Usecase["name"]]: Extract<Usecase, { name: Key }>["reducer"];
}> {
return Object.fromEntries(
usecases.map(({ name, reducer }) => [name, reducer]).filter(([, reducer]) => reducer !== null),
) as any;
}
type NonNullPropertyNames<O> = {
[Key in keyof O]: O[Key] extends null ? never : Key;
}[keyof O];
type RemoveNullProperties<O> = { [Key in NonNullPropertyNames<O>]: O[Key] };