From d8d3185a3feef75099e631a54aeb94dd98a6fa3a Mon Sep 17 00:00:00 2001 From: Jiajun Chen Date: Thu, 17 Feb 2022 10:05:56 +0800 Subject: [PATCH 01/16] fix: Better type definition for dataIndex --- src/interface.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/interface.ts b/src/interface.ts index a0d146537..d7c918806 100644 --- a/src/interface.ts +++ b/src/interface.ts @@ -75,7 +75,7 @@ export type AlignType = 'left' | 'center' | 'right'; export interface ColumnType extends ColumnSharedType { colSpan?: number; - dataIndex?: DataIndex; + dataIndex?: keyof RecordType extends DataIndex ? keyof RecordType : DataIndex; render?: ( value: any, record: RecordType, From e24588a1f8587c5789c6a90c8ae97748733f5b95 Mon Sep 17 00:00:00 2001 From: Jiajun Chen Date: Thu, 17 Feb 2022 10:28:26 +0800 Subject: [PATCH 02/16] Update interface.ts --- src/interface.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/interface.ts b/src/interface.ts index d7c918806..728ca0615 100644 --- a/src/interface.ts +++ b/src/interface.ts @@ -75,7 +75,7 @@ export type AlignType = 'left' | 'center' | 'right'; export interface ColumnType extends ColumnSharedType { colSpan?: number; - dataIndex?: keyof RecordType extends DataIndex ? keyof RecordType : DataIndex; + dataIndex?: RecordType extends Record ? keyof RecordType extends DataIndex ? keyof RecordType | readonly (string | number)[] : DataIndex : DataIndex;; render?: ( value: any, record: RecordType, From 3584dfbd717ebb6182d82e438619c0db1a63e773 Mon Sep 17 00:00:00 2001 From: Jiajun Chen Date: Thu, 17 Feb 2022 10:38:09 +0800 Subject: [PATCH 03/16] Update interface.ts --- src/interface.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/interface.ts b/src/interface.ts index 728ca0615..8ec1f60f6 100644 --- a/src/interface.ts +++ b/src/interface.ts @@ -73,9 +73,11 @@ export interface ColumnGroupType extends ColumnSharedType = RecordType extends Record ? keyof RecordType extends DataIndex ? Extract> extends Record ? keyof RecordType | readonly (string | number)[] : keyof RecordType : DataIndex : DataIndex; + export interface ColumnType extends ColumnSharedType { colSpan?: number; - dataIndex?: RecordType extends Record ? keyof RecordType extends DataIndex ? keyof RecordType | readonly (string | number)[] : DataIndex : DataIndex;; + dataIndex?: DataIndexType; render?: ( value: any, record: RecordType, From 44db320709e4ef3beabe473e500c8067029a45ed Mon Sep 17 00:00:00 2001 From: Jiajun Chen Date: Thu, 17 Feb 2022 10:42:35 +0800 Subject: [PATCH 04/16] Update interface.ts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 嵌套对象不管了…… --- src/interface.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/interface.ts b/src/interface.ts index 8ec1f60f6..d42995935 100644 --- a/src/interface.ts +++ b/src/interface.ts @@ -73,7 +73,7 @@ export interface ColumnGroupType extends ColumnSharedType = RecordType extends Record ? keyof RecordType extends DataIndex ? Extract> extends Record ? keyof RecordType | readonly (string | number)[] : keyof RecordType : DataIndex : DataIndex; +export type DataIndexType = RecordType extends Record ? keyof RecordType extends DataIndex ? Extract> extends never ? keyof RecordType : keyof RecordType | readonly (string | number)[] : DataIndex : DataIndex; export interface ColumnType extends ColumnSharedType { colSpan?: number; From 3d3f0e509b2361aad3042db1531a23aabb0914f1 Mon Sep 17 00:00:00 2001 From: Jiajun Chen Date: Thu, 17 Feb 2022 10:59:58 +0800 Subject: [PATCH 05/16] Update interface.ts --- src/interface.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/interface.ts b/src/interface.ts index d42995935..254bd19ab 100644 --- a/src/interface.ts +++ b/src/interface.ts @@ -73,7 +73,12 @@ export interface ColumnGroupType extends ColumnSharedType = RecordType extends Record ? keyof RecordType extends DataIndex ? Extract> extends never ? keyof RecordType : keyof RecordType | readonly (string | number)[] : DataIndex : DataIndex; +export type DataIndexType = RecordType extends Record ? + keyof RecordType extends DataIndex ? + Extract | Record> extends never ? + keyof RecordType : + RecordType[keyof RecordType] extends string ? keyof RecordType | readonly [keyof RecordType, number] : + keyof RecordType | readonly (string | number)[] : DataIndex : DataIndex; export interface ColumnType extends ColumnSharedType { colSpan?: number; From 57fe226a5d0c4cadea0ae29f4ad9f89a932ca59e Mon Sep 17 00:00:00 2001 From: Jiajun Chen Date: Thu, 17 Feb 2022 11:33:03 +0800 Subject: [PATCH 06/16] Update interface.ts --- src/interface.ts | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/interface.ts b/src/interface.ts index 254bd19ab..635c76f3d 100644 --- a/src/interface.ts +++ b/src/interface.ts @@ -55,6 +55,8 @@ export interface RenderedCell { export type DataIndex = string | number | readonly (string | number)[]; +type DataIndexArray = [string] | [number] | readonly (string | number)[]; + export type CellEllipsisType = { showTitle?: boolean } | boolean; interface ColumnSharedType { @@ -73,12 +75,15 @@ export interface ColumnGroupType extends ColumnSharedType = RecordType extends Record ? - keyof RecordType extends DataIndex ? +export type DataIndexArrayType = RecordType extends Record | string | number ? + [keyof RecordType] extends DataIndexArray ? Extract | Record> extends never ? - keyof RecordType : - RecordType[keyof RecordType] extends string ? keyof RecordType | readonly [keyof RecordType, number] : - keyof RecordType | readonly (string | number)[] : DataIndex : DataIndex; + [keyof RecordType] : + RecordType[keyof RecordType] extends string ? [keyof RecordType] | readonly [keyof RecordType, number] : + [keyof RecordType] | [keyof RecordType, ...DataIndexArrayType] : DataIndexArray : []; + +export type DataIndexType = DataIndexArrayType extends { length: 0 } ? + DataIndex : DataIndexArrayType extends { length: 1 } ? DataIndexArrayType[0] : DataIndexArrayType; export interface ColumnType extends ColumnSharedType { colSpan?: number; From b5f4b85f65bb97ff786750745dd47e49c97e7210 Mon Sep 17 00:00:00 2001 From: Jiajun Chen Date: Thu, 17 Feb 2022 14:06:38 +0800 Subject: [PATCH 07/16] Update interface.ts --- src/interface.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/interface.ts b/src/interface.ts index 635c76f3d..55e737df3 100644 --- a/src/interface.ts +++ b/src/interface.ts @@ -75,12 +75,16 @@ export interface ColumnGroupType extends ColumnSharedType = RecordType extends Record | string | number ? +type ExtractIndex = { [key in keyof RecordType]: [key, ...DataIndexArrayType] }[keyof RecordType]; + +type Unwrap> = TArr | (TArr extends { length: 1 } ? TArr : TArr extends { length: 2 } ? [TArr[0]] : TArr extends [...infer U, infer Last] ? Unwrap : never); + +type DataIndexArrayType = RecordType extends Record | string | Array ? [keyof RecordType] extends DataIndexArray ? - Extract | Record> extends never ? + Extract | Record> extends never ? [keyof RecordType] : - RecordType[keyof RecordType] extends string ? [keyof RecordType] | readonly [keyof RecordType, number] : - [keyof RecordType] | [keyof RecordType, ...DataIndexArrayType] : DataIndexArray : []; + RecordType[keyof RecordType] extends string ? [keyof RecordType, number] : + [keyof RecordType] | Unwrap> : DataIndexArray : []; export type DataIndexType = DataIndexArrayType extends { length: 0 } ? DataIndex : DataIndexArrayType extends { length: 1 } ? DataIndexArrayType[0] : DataIndexArrayType; From f0b18e1ddf4c0d33d8d0e6b1a5d2349fb0aa1055 Mon Sep 17 00:00:00 2001 From: Jiajun Chen Date: Thu, 17 Feb 2022 14:17:51 +0800 Subject: [PATCH 08/16] Update interface.ts --- src/interface.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/interface.ts b/src/interface.ts index 55e737df3..8da371aa2 100644 --- a/src/interface.ts +++ b/src/interface.ts @@ -77,11 +77,11 @@ export type AlignType = 'left' | 'center' | 'right'; type ExtractIndex = { [key in keyof RecordType]: [key, ...DataIndexArrayType] }[keyof RecordType]; -type Unwrap> = TArr | (TArr extends { length: 1 } ? TArr : TArr extends { length: 2 } ? [TArr[0]] : TArr extends [...infer U, infer Last] ? Unwrap : never); +type Unwrap = TArr | (TArr extends { length: 1 } ? TArr : TArr extends { length: 2 } ? [TArr[0]] : TArr extends [...infer U, infer Last] ? Unwrap : never); -type DataIndexArrayType = RecordType extends Record | string | Array ? +type DataIndexArrayType = RecordType extends Record | string | any[] ? [keyof RecordType] extends DataIndexArray ? - Extract | Record> extends never ? + Extract> extends never ? [keyof RecordType] : RecordType[keyof RecordType] extends string ? [keyof RecordType, number] : [keyof RecordType] | Unwrap> : DataIndexArray : []; From 4b3ad588c659b0cd46830e5461a3755b85e275e2 Mon Sep 17 00:00:00 2001 From: Jiajun Chen Date: Thu, 17 Feb 2022 14:22:12 +0800 Subject: [PATCH 09/16] fix: compile error --- src/interface.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/interface.ts b/src/interface.ts index 8da371aa2..f0dce0d24 100644 --- a/src/interface.ts +++ b/src/interface.ts @@ -87,7 +87,7 @@ type DataIndexArrayType = RecordType extends Rec [keyof RecordType] | Unwrap> : DataIndexArray : []; export type DataIndexType = DataIndexArrayType extends { length: 0 } ? - DataIndex : DataIndexArrayType extends { length: 1 } ? DataIndexArrayType[0] : DataIndexArrayType; + DataIndex : DataIndexArrayType extends { length: 1 } ? (DataIndexArrayType[0] | DataIndexArrayType) : DataIndexArrayType; export interface ColumnType extends ColumnSharedType { colSpan?: number; From ccc4f9fe743a20c53b2ad6dc6d16d138f8bf1ddd Mon Sep 17 00:00:00 2001 From: Jiajun Chen Date: Thu, 17 Feb 2022 14:47:07 +0800 Subject: [PATCH 10/16] add readonly --- src/interface.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/interface.ts b/src/interface.ts index f0dce0d24..8d1c20ca3 100644 --- a/src/interface.ts +++ b/src/interface.ts @@ -55,7 +55,7 @@ export interface RenderedCell { export type DataIndex = string | number | readonly (string | number)[]; -type DataIndexArray = [string] | [number] | readonly (string | number)[]; +type DataIndexArray = readonly [string] | readonly [number] | readonly (string | number)[]; export type CellEllipsisType = { showTitle?: boolean } | boolean; @@ -77,14 +77,14 @@ export type AlignType = 'left' | 'center' | 'right'; type ExtractIndex = { [key in keyof RecordType]: [key, ...DataIndexArrayType] }[keyof RecordType]; -type Unwrap = TArr | (TArr extends { length: 1 } ? TArr : TArr extends { length: 2 } ? [TArr[0]] : TArr extends [...infer U, infer Last] ? Unwrap : never); +type Unwrap> = TArr | (TArr extends { length: 1 } ? TArr : TArr extends { length: 2 } ? readonly [TArr[0]] : TArr extends [...infer U, infer Last] ? Unwrap : never); -type DataIndexArrayType = RecordType extends Record | string | any[] ? +export type DataIndexArrayType = RecordType extends Record | string | Array ? [keyof RecordType] extends DataIndexArray ? - Extract> extends never ? - [keyof RecordType] : - RecordType[keyof RecordType] extends string ? [keyof RecordType, number] : - [keyof RecordType] | Unwrap> : DataIndexArray : []; + Extract | Record> extends never ? + readonly [keyof RecordType] : + RecordType[keyof RecordType] extends string ? readonly [keyof RecordType, number] : + readonly [keyof RecordType] | Unwrap> : DataIndexArray : []; export type DataIndexType = DataIndexArrayType extends { length: 0 } ? DataIndex : DataIndexArrayType extends { length: 1 } ? (DataIndexArrayType[0] | DataIndexArrayType) : DataIndexArrayType; From 76036fac0b06701da5061ccfa6ca33b0d8cda22a Mon Sep 17 00:00:00 2001 From: Jiajun Chen Date: Thu, 17 Feb 2022 14:52:59 +0800 Subject: [PATCH 11/16] fix: dataIndex for RecordType Record --- src/interface.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/interface.ts b/src/interface.ts index 8d1c20ca3..c8b103fde 100644 --- a/src/interface.ts +++ b/src/interface.ts @@ -77,17 +77,17 @@ export type AlignType = 'left' | 'center' | 'right'; type ExtractIndex = { [key in keyof RecordType]: [key, ...DataIndexArrayType] }[keyof RecordType]; -type Unwrap> = TArr | (TArr extends { length: 1 } ? TArr : TArr extends { length: 2 } ? readonly [TArr[0]] : TArr extends [...infer U, infer Last] ? Unwrap : never); +type Unwrap> = TArr | (TArr extends { length: 1 } ? TArr : TArr extends { length: 2 } ? readonly [TArr[0]] : TArr extends readonly [...infer U, infer Last] ? Unwrap : never); export type DataIndexArrayType = RecordType extends Record | string | Array ? [keyof RecordType] extends DataIndexArray ? Extract | Record> extends never ? readonly [keyof RecordType] : - RecordType[keyof RecordType] extends string ? readonly [keyof RecordType, number] : + RecordType[keyof RecordType] extends string ? readonly [keyof RecordType, number] | readonly [keyof RecordType] : readonly [keyof RecordType] | Unwrap> : DataIndexArray : []; export type DataIndexType = DataIndexArrayType extends { length: 0 } ? - DataIndex : DataIndexArrayType extends { length: 1 } ? (DataIndexArrayType[0] | DataIndexArrayType) : DataIndexArrayType; + DataIndex : (DataIndexArrayType[0] | DataIndexArrayType); export interface ColumnType extends ColumnSharedType { colSpan?: number; From d26143789dec519b2c81d9683abe108c8aa86176 Mon Sep 17 00:00:00 2001 From: Jiajun Chen Date: Sun, 20 Feb 2022 12:46:05 +0800 Subject: [PATCH 12/16] fix: remove default value of generic type RecordType --- src/interface.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/interface.ts b/src/interface.ts index c8b103fde..b8fabaa08 100644 --- a/src/interface.ts +++ b/src/interface.ts @@ -79,14 +79,14 @@ type ExtractIndex = { [key in keyof RecordType]: [key, ...DataIndexA type Unwrap> = TArr | (TArr extends { length: 1 } ? TArr : TArr extends { length: 2 } ? readonly [TArr[0]] : TArr extends readonly [...infer U, infer Last] ? Unwrap : never); -export type DataIndexArrayType = RecordType extends Record | string | Array ? +export type DataIndexArrayType = RecordType extends Record | string | Array ? [keyof RecordType] extends DataIndexArray ? Extract | Record> extends never ? readonly [keyof RecordType] : RecordType[keyof RecordType] extends string ? readonly [keyof RecordType, number] | readonly [keyof RecordType] : readonly [keyof RecordType] | Unwrap> : DataIndexArray : []; -export type DataIndexType = DataIndexArrayType extends { length: 0 } ? +export type DataIndexType = DataIndexArrayType extends { length: 0 } ? DataIndex : (DataIndexArrayType[0] | DataIndexArrayType); export interface ColumnType extends ColumnSharedType { From 95c3cadeff6bc969668b5c1669e9e2166c5b55ad Mon Sep 17 00:00:00 2001 From: Jiajun Chen Date: Sun, 20 Feb 2022 15:23:11 +0800 Subject: [PATCH 13/16] fix: compatible with RecordType = any --- src/interface.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/interface.ts b/src/interface.ts index b8fabaa08..06b2d4a53 100644 --- a/src/interface.ts +++ b/src/interface.ts @@ -86,8 +86,8 @@ export type DataIndexArrayType = RecordType extends Record> : DataIndexArray : []; -export type DataIndexType = DataIndexArrayType extends { length: 0 } ? - DataIndex : (DataIndexArrayType[0] | DataIndexArrayType); +export type DataIndexType = Exclude extends { length: 0 } ? + DataIndex : (DataIndexArrayType[0] | DataIndexArrayType), [] | undefined>; export interface ColumnType extends ColumnSharedType { colSpan?: number; From 4935b49700b2da985f12ebf06e5c8b5a68c79b7d Mon Sep 17 00:00:00 2001 From: Jiajun Chen Date: Sun, 20 Feb 2022 16:02:08 +0800 Subject: [PATCH 14/16] fix: mark readonly at last --- src/interface.ts | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/interface.ts b/src/interface.ts index 06b2d4a53..5aa8b9bfa 100644 --- a/src/interface.ts +++ b/src/interface.ts @@ -77,18 +77,21 @@ export type AlignType = 'left' | 'center' | 'right'; type ExtractIndex = { [key in keyof RecordType]: [key, ...DataIndexArrayType] }[keyof RecordType]; -type Unwrap> = TArr | (TArr extends { length: 1 } ? TArr : TArr extends { length: 2 } ? readonly [TArr[0]] : TArr extends readonly [...infer U, infer Last] ? Unwrap : never); +type Unwrap> = TArr | (TArr extends { length: 1 } ? TArr : TArr extends { length: 2 } ? [TArr[0]] : TArr extends [...infer U, infer Last] ? Unwrap : never); -export type DataIndexArrayType = RecordType extends Record | string | Array ? +type DataIndexArrayType = RecordType extends Record | string | Array ? [keyof RecordType] extends DataIndexArray ? Extract | Record> extends never ? - readonly [keyof RecordType] : - RecordType[keyof RecordType] extends string ? readonly [keyof RecordType, number] | readonly [keyof RecordType] : - readonly [keyof RecordType] | Unwrap> : DataIndexArray : []; + [keyof RecordType] : + RecordType[keyof RecordType] extends string ? [keyof RecordType, number] | [keyof RecordType] : + [keyof RecordType] | Unwrap> : DataIndexArray : []; -export type DataIndexType = Exclude extends { length: 0 } ? +type MutableDataIndexType = Exclude extends { length: 0 } ? DataIndex : (DataIndexArrayType[0] | DataIndexArrayType), [] | undefined>; + +type DataIndexType = Readonly, { pop: Function }>> | Exclude, { pop: Function }>; + export interface ColumnType extends ColumnSharedType { colSpan?: number; dataIndex?: DataIndexType; From 05c2f5be36af4e8555f90a00c85b65c2cc2c0bcb Mon Sep 17 00:00:00 2001 From: Jiajun Chen Date: Sun, 20 Feb 2022 18:44:49 +0800 Subject: [PATCH 15/16] Update interface.ts --- src/interface.ts | 63 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 46 insertions(+), 17 deletions(-) diff --git a/src/interface.ts b/src/interface.ts index 5aa8b9bfa..e5c30e38e 100644 --- a/src/interface.ts +++ b/src/interface.ts @@ -75,23 +75,52 @@ export interface ColumnGroupType extends ColumnSharedType = { [key in keyof RecordType]: [key, ...DataIndexArrayType] }[keyof RecordType]; - -type Unwrap> = TArr | (TArr extends { length: 1 } ? TArr : TArr extends { length: 2 } ? [TArr[0]] : TArr extends [...infer U, infer Last] ? Unwrap : never); - -type DataIndexArrayType = RecordType extends Record | string | Array ? - [keyof RecordType] extends DataIndexArray ? - Extract | Record> extends never ? - [keyof RecordType] : - RecordType[keyof RecordType] extends string ? [keyof RecordType, number] | [keyof RecordType] : - [keyof RecordType] | Unwrap> : DataIndexArray : []; - -type MutableDataIndexType = Exclude extends { length: 0 } ? - DataIndex : (DataIndexArrayType[0] | DataIndexArrayType), [] | undefined>; - - -type DataIndexType = Readonly, { pop: Function }>> | Exclude, { pop: Function }>; - +type IsExactlyAny = boolean extends (T extends never ? true : false) ? true : false; + +type ExtractIndex = Extract< + { + [key in keyof RecordType]: Exclude extends never + ? [key, number] + : [key, ...DataIndexArrayType]; + }[keyof RecordType], + readonly (string | number)[] +>; + +type Unwrap = TArr extends { length: 0 } + ? [] + : number extends TArr['length'] + ? TArr + : + | TArr + | (TArr extends { length: 1 } + ? TArr + : TArr extends { length: 2 } + ? [TArr[0]] + : TArr extends [...infer U, unknown] + ? Unwrap + : never); + +type DataIndexArrayType = IsExactlyAny extends true + ? DataIndexArray + : Exclude extends never + ? [number] + : Exclude> extends never + ? [keyof RecordType] + : [keyof RecordType] | Unwrap>; + +type MutableDataIndexType = Exclude< + DataIndexArrayType extends [never] + ? DataIndex + : DataIndexArrayType extends { length: 0 } + ? DataIndex + : number extends DataIndexArrayType ? DataIndex : + DataIndexArrayType[0] | DataIndexArrayType, + [] | undefined +>; + +type DataIndexType = Extract, { pop: any }> extends never ? DataIndex : + | Readonly, { pop: any }>> + | Extract; export interface ColumnType extends ColumnSharedType { colSpan?: number; dataIndex?: DataIndexType; From e9c5eecd79833bbfa335f82ada01c29559d31565 Mon Sep 17 00:00:00 2001 From: Jiajun Chen Date: Sun, 20 Feb 2022 22:00:52 +0800 Subject: [PATCH 16/16] fix: simplified dataIndex --- src/interface.ts | 43 ++++++++++++++++--------------------------- 1 file changed, 16 insertions(+), 27 deletions(-) diff --git a/src/interface.ts b/src/interface.ts index e5c30e38e..da9082594 100644 --- a/src/interface.ts +++ b/src/interface.ts @@ -79,48 +79,37 @@ type IsExactlyAny = boolean extends (T extends never ? true : false) ? true : type ExtractIndex = Extract< { - [key in keyof RecordType]: Exclude extends never - ? [key, number] - : [key, ...DataIndexArrayType]; - }[keyof RecordType], + [key in Extract]: key extends never ? [] : IsExactlyAny extends true ? [key, ...DataIndexArray] : [key, ...DataIndexArrayType]; + }[Extract], readonly (string | number)[] >; -type Unwrap = TArr extends { length: 0 } +type Unwrap = TArr extends { length: 0 } ? [] : number extends TArr['length'] ? TArr - : - | TArr + : (string | number)[] extends TArr ? TArr : + TArr | (TArr extends { length: 1 } ? TArr : TArr extends { length: 2 } ? [TArr[0]] : TArr extends [...infer U, unknown] - ? Unwrap - : never); + ? U extends readonly (string | number)[] ? Unwrap : [] + : []); type DataIndexArrayType = IsExactlyAny extends true - ? DataIndexArray - : Exclude extends never + ? [] + : RecordType extends string ? [number] - : Exclude> extends never - ? [keyof RecordType] - : [keyof RecordType] | Unwrap>; - -type MutableDataIndexType = Exclude< - DataIndexArrayType extends [never] - ? DataIndex - : DataIndexArrayType extends { length: 0 } - ? DataIndex - : number extends DataIndexArrayType ? DataIndex : - DataIndexArrayType[0] | DataIndexArrayType, - [] | undefined ->; + : RecordType extends Record + ? Unwrap> + : RecordType extends any[] + ? [number, ...Unwrap>] + : []; + +type DataIndexType = Readonly> extends { length: 0 } ? DataIndex : Readonly> | Readonly>[0] -type DataIndexType = Extract, { pop: any }> extends never ? DataIndex : - | Readonly, { pop: any }>> - | Extract; export interface ColumnType extends ColumnSharedType { colSpan?: number; dataIndex?: DataIndexType;