/** * Ensures there are no duplicate keys when building a procedure. */ export function mergeWithoutOverrides>( obj1: TType, ...objs: Partial[] ): TType { const newObj: TType = Object.assign(Object.create(null), obj1); for (const overrides of objs) { for (const key in overrides) { if (key in newObj && newObj[key] !== overrides[key]) { throw new Error(`Duplicate key ${key}`); } newObj[key as keyof TType] = overrides[key] as TType[keyof TType]; } } return newObj; }