import type { DataTableColumn } from 'naive-ui'; type UnionColumn = T extends DataTableColumn[] ? TypeUtil.ArrayToUnion : never; type ColumnKey = 'key'; type InterfaceArray = { [key: string]: unknown; }; type ColumnKeyData = { key: unknown; }; type ExcludeArrayByKey = T extends [infer First, ...infer Rest] ? First extends ColumnKeyData ? Rest extends InterfaceArray[] ? [First, ...ExcludeArrayByKey] : [First] : Rest extends InterfaceArray[] ? ExcludeArrayByKey : [] : []; type GetUnionColumnKey = ColumnKey extends keyof UnionColumn ? UnionColumn[ColumnKey] : never; export const columns: DataTableColumn[] = [ { type: 'selection' }, { title: 'Name', key: 'name', align: 'center' }, { title: 'Age', key: 'age' }, { title: 'Address', key: 'address' } ]; export type UnionColumnKey = GetUnionColumnKey< ExcludeArrayByKey< [ { type: 'selection'; }, { title: 'Name'; key: 'name'; align: 'center'; }, { title: 'Age'; key: 'age'; }, { title: 'Address'; key: 'address'; } ] > >;