17 lines
538 B
TypeScript
17 lines
538 B
TypeScript
export type Overwrite<T, U> = {
|
|
[K in keyof (T & U)]: K extends keyof U ? U[K]
|
|
: K extends keyof T ? T[K]
|
|
: never;
|
|
};
|
|
|
|
type AllMerged<Objects extends any[]> = Objects extends
|
|
[infer T, infer U, ...infer Rest] ? AllMerged<[Overwrite<T, U>, ...Rest]>
|
|
: Objects extends [infer T, ...infer Rest] ? T
|
|
: Objects extends (infer Rest)[] ? Rest
|
|
: never;
|
|
|
|
export const merge = <T extends any[]>(objects: T): AllMerged<T> =>
|
|
Object.assign(Object.create(null), ...objects);
|
|
|
|
export const scopes = (...scopes: string[]) => scopes.join(' ');
|