import {Overwrite} from './grammar.mts'; 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);