-
Notifications
You must be signed in to change notification settings - Fork 516
Open
Description
Typing of merge function:
declare function merge<T extends Record<PropertyKey, any>, S extends Record<PropertyKey, any>>(target: T, source: S): T & S;Does not describe a true deep merge. It only says: “return something that has all properties of T and S.” This is a shallow structural type and does not capture recursive merging behavior.
I suggest using following instead:
export type OverrideDeep<Base, Override> = Base extends object
? Override extends object
? {
[K in keyof Base | keyof Override]: K extends keyof Override
? K extends keyof Base
? OverrideDeep<Base[K], Override[K]>
: Override[K]
: K extends keyof Base
? Base[K]
: never;
}
: Override
: Override;Metadata
Metadata
Assignees
Labels
No labels