Created
November 6, 2020 21:32
-
-
Save colinhacks/252d2e5d35b953aff8f4c4b5914c7548 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
type Generics = Partial<{ | |
asdf:string; | |
qwer : number; | |
}> | |
type Defaults = Required<{ | |
asdf: 'default'; | |
qwer: 1234; | |
}>; | |
type identity<T> = {[k in keyof T ]:T[k]} | |
type MergeDefaults<Inputs extends Generics> = identity< | |
{ | |
[k in keyof Defaults]: k extends keyof Inputs | |
? Inputs[k] | |
: Defaults[k]; | |
} | |
>; | |
const myGenericFunc = <Inputs extends Generics>(args: string): MergeDefaults<Inputs> => { | |
return args as any; | |
}; | |
myGenericFunc<{asdf: 'override'}>('asdf'); | |
// => { asdf: "override"; qwer: 1234; } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment