diff --git a/src/interface.ts b/src/interface.ts index aab2526c8..42157c78d 100644 --- a/src/interface.ts +++ b/src/interface.ts @@ -115,6 +115,41 @@ export interface ColumnGroupType extends ColumnSharedType = boolean extends (T extends never ? true : false) ? true : false; + +type ExtractIndex = Extract< + { + [key in Extract]: key extends never ? [] : IsExactlyAny extends true ? [key, ...DataIndexArray] : [key, ...DataIndexArrayType]; + }[Extract], + readonly (string | number)[] +>; + +type Unwrap = TArr extends { length: 0 } + ? [] + : number extends TArr['length'] + ? TArr + : (string | number)[] extends TArr ? TArr : + TArr + | (TArr extends { length: 1 } + ? TArr + : TArr extends { length: 2 } + ? [TArr[0]] + : TArr extends [...infer U, unknown] + ? U extends readonly (string | number)[] ? Unwrap : [] + : []); + +type DataIndexArrayType = IsExactlyAny extends true + ? [] + : RecordType extends string + ? [number] + : RecordType extends Record + ? Unwrap> + : RecordType extends any[] + ? [number, ...Unwrap>] + : []; + +type DataIndexType = Readonly> extends { length: 0 } ? DataIndex : Readonly> | Readonly>[0] + export interface ColumnType extends ColumnSharedType { colSpan?: number; dataIndex?: DataIndex;