Skip to content

Commit 34a1789

Browse files
fix(overmind): nested rehydrate typing fix
1 parent c295561 commit 34a1789

File tree

1 file changed

+14
-12
lines changed

1 file changed

+14
-12
lines changed

packages/node_modules/overmind/src/rehydrate.ts

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -44,24 +44,26 @@ type SerializableValue = Serializable | Array<Serializable> | { [key: string]: S
4444

4545
type FilteredKeys<T, U> = { [P in keyof T]: T[P] extends U ? P : never }[keyof T];
4646

47-
type ExcludeNever<T extends StateNode> = { [P in keyof T]: T[P] extends never ? never : P }[keyof T]
47+
type ExcludeNever<T extends {}> = { [P in keyof T]: T[P] extends never ? never : P }[keyof T]
4848

49-
type StateNode = { [key: string]: any }
50-
51-
type NeverStateNode = { [key: string]: never }
52-
53-
export type Classes<
54-
T extends StateNode,
49+
type ExtracType<
50+
T extends {},
51+
K
5552
> = {
56-
[P in FilteredKeys<T, SerializableValue | StateNode>]:
53+
[P in FilteredKeys<T, K | {}>]:
5754
T[P] extends SerializableValue ? (data: any) => Serializable :
58-
T[P] extends StateNode ? Classes<T[P]> extends NeverStateNode ? never : Classes<T[P]> : never
55+
T[P] extends {} ? ExtracType<T[P], K> extends { [key: string]: never } ? never : ExtractDeepType<T[P], K> : never
56+
}
57+
58+
type ExtractDeepType<T extends {}, K, U = ExtracType<T, K>> = {
59+
[P in ExcludeNever<U>]: U[P]
5960
}
6061

62+
type StateNode = {
63+
[key: string]: any
64+
}
6165

62-
export const rehydrate = <T extends StateNode, U = Classes<T>>(state: T, source: IMutation[] | StateNode, classes: {
63-
[P in ExcludeNever<U>]: U[P]
64-
} = {} as any) => {
66+
export const rehydrate = <T extends StateNode>(state: T, source: IMutation[] | StateNode, classes: ExtractDeepType<T, SerializableValue> = {} as any) => {
6567
if (Array.isArray(source)) {
6668
const mutations = source as IMutation[]
6769
mutations.forEach((mutation) => {

0 commit comments

Comments
 (0)