type Column = { label: string; props: string };
type LinkColumn = { type: 'link'; path: string } & Column;
type OmitObjectsKeys<T, GObjects extends unknown[]> = GObjects extends [
infer GObject0,
...infer GObjectsRest,
]
? OmitObjectsKeys<
T & { [Key in keyof GObject0 as Key extends keyof T ? never : Key]?: never },
GObjectsRest
>
: T;
type OmitEachOther<
GObjects extends unknown[],
GPrevObjects extends unknown[] = [],
> = GObjects extends [infer GObject0, ...infer GObjectsRest]
?
| OmitObjectsKeys<GObject0, [...GPrevObjects, ...GObjectsRest]>
| OmitEachOther<GObjectsRest, [...GPrevObjects, GObject0]>
: never;
type TableColumn = OmitEachOther<[Column, LinkColumn]>;