Skip to content

Instantly share code, notes, and snippets.

@colinhacks
Created November 6, 2020 21:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save colinhacks/252d2e5d35b953aff8f4c4b5914c7548 to your computer and use it in GitHub Desktop.
Save colinhacks/252d2e5d35b953aff8f4c4b5914c7548 to your computer and use it in GitHub Desktop.
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