import type { CommonKeys } from "./CommonKeys" export type Extend = Extendable extends true ? Omit> & Self : never export type Extendable = Pick> extends Pick> ? true : false export type ExtendAll = T extends readonly [ infer Super, infer Self, ...infer Rest extends readonly object[], ] ? Extendable extends true ? ExtendAll, ...Rest]> : never : T extends readonly [infer Self] ? Self : {} export type ExtendableAll = T extends readonly [ infer Super, infer Self, ...infer Rest extends readonly object[], ] ? Extendable extends true ? ExtendableAll, ...Rest]> : false : true // export type NonExtendableKeys = ( // T extends readonly [ // infer Super extends object, // infer Self extends object, // ...infer Rest extends readonly object[], // ] // ? {[K in keyof Super & keyof Self]: Self[K] extends Super[K] // ? never // : K // }[keyof Super & keyof Self] // | NonExtendableKeys // : void // )