@douyinfe/semi-foundation 2.76.0-alpha.1 → 2.76.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/form/interface.ts +27 -83
- package/lib/cjs/form/interface.d.ts +4 -7
- package/lib/es/form/interface.d.ts +4 -7
- package/package.json +4 -4
package/form/interface.ts
CHANGED
|
@@ -38,95 +38,38 @@ export interface setValuesConfig {
|
|
|
38
38
|
isOverride: boolean
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
+
// FieldPath 类型定义,用于生成对象字段的路径字符串
|
|
42
|
+
export type FieldPath<T> = T extends object ? {
|
|
43
|
+
// 遍历对象的每个键 K
|
|
44
|
+
[K in keyof T]: T[K] extends object
|
|
45
|
+
// 如果键 K 对应的值是对象,则生成嵌套路径(递归调用 FieldPath)
|
|
46
|
+
? `${string & K}.${FieldPath<T[K]>}` | `${string & K}`
|
|
47
|
+
// 否则,仅生成当前键的路径
|
|
48
|
+
: `${string & K}`;
|
|
49
|
+
}[keyof T]
|
|
50
|
+
: never;
|
|
51
|
+
|
|
52
|
+
// FieldPathValue 类型定义,用于从路径字符串中推导出实际的类型
|
|
53
|
+
export type FieldPathValue<T, P extends FieldPath<T>> =
|
|
54
|
+
// 如果路径字符串 P 包含嵌套路径(使用模板字符串类型进行匹配)
|
|
55
|
+
P extends `${infer K}.${infer Rest}`
|
|
56
|
+
? K extends keyof T
|
|
57
|
+
// 递归解析嵌套路径,逐层深入对象结构
|
|
58
|
+
? Rest extends FieldPath<T[K]>
|
|
59
|
+
? FieldPathValue<T[K], Rest>
|
|
60
|
+
: never
|
|
61
|
+
: never
|
|
62
|
+
// 如果路径字符串 P 是顶层键
|
|
63
|
+
: P extends keyof T
|
|
64
|
+
? T[P]
|
|
65
|
+
: never;
|
|
66
|
+
|
|
41
67
|
export type ScrollToErrorOptions<K> = {
|
|
42
68
|
field?: K;
|
|
43
69
|
index?: number;
|
|
44
70
|
scrollOpts?: ScrollIntoViewOptions
|
|
45
71
|
}
|
|
46
72
|
|
|
47
|
-
// 支持 array[index] 和 array.index 两种形式
|
|
48
|
-
type ArrayIndexPath<K extends string | number, U> =
|
|
49
|
-
| `${K}[${number}]` // 支持 array[index]
|
|
50
|
-
| `${K}[${number}].${FieldPath<U>}` // 支持 array[index].child
|
|
51
|
-
| `${K}.${number}` // 支持 array.index
|
|
52
|
-
| `${K}.${number}.${FieldPath<U>}`; // 支持 array.index.child
|
|
53
|
-
|
|
54
|
-
// FieldPath 类型定义,支持对象和数组字段路径
|
|
55
|
-
export type FieldPath<T> = T extends Array<infer U>
|
|
56
|
-
? | `${number}` // 如果是数组,支持数字索引(如 `[0]`)
|
|
57
|
-
| `${number}.${FieldPath<U>}` // 支持数组嵌套路径(如 `[0].field`)
|
|
58
|
-
: T extends object
|
|
59
|
-
? {
|
|
60
|
-
[K in keyof T]: K extends string
|
|
61
|
-
? T[K] extends Array<infer U> | object
|
|
62
|
-
? | `${K}`
|
|
63
|
-
| `${K}.${FieldPath<T[K]>}`
|
|
64
|
-
| ArrayIndexPath<K, U>
|
|
65
|
-
: `${K}` // 只允许键路径
|
|
66
|
-
: never;
|
|
67
|
-
}[keyof T]
|
|
68
|
-
: never;
|
|
69
|
-
|
|
70
|
-
type ArrayFieldPathValue<T, P extends string> =
|
|
71
|
-
P extends `${infer K}[${infer I}]${infer Rest}`
|
|
72
|
-
? K extends keyof T
|
|
73
|
-
? T[K] extends Array<infer U>
|
|
74
|
-
? I extends `${number}`
|
|
75
|
-
? Rest extends ''
|
|
76
|
-
? U // 索引路径
|
|
77
|
-
: Rest extends `.${infer RestPath}`
|
|
78
|
-
? FieldPathValue<U, RestPath> // 嵌套路径
|
|
79
|
-
: never
|
|
80
|
-
: never
|
|
81
|
-
: never
|
|
82
|
-
: never
|
|
83
|
-
: never;
|
|
84
|
-
|
|
85
|
-
// FieldPathValue 类型定义,支持从路径字符串中推导数组和对象的值
|
|
86
|
-
export type FieldPathValue<T, P extends string> =
|
|
87
|
-
ArrayFieldPathValue<T, P> // 处理数组路径
|
|
88
|
-
| (P extends `${infer K}.${infer Rest}`
|
|
89
|
-
? K extends keyof T
|
|
90
|
-
? FieldPathValue<T[K], Rest>
|
|
91
|
-
: never
|
|
92
|
-
: P extends keyof T
|
|
93
|
-
? T[P]
|
|
94
|
-
: never);
|
|
95
|
-
|
|
96
|
-
// FieldPathValue 类型定义,支持从路径字符串中推导数组和对象的值 (Complex version)
|
|
97
|
-
// export type FieldPathValue<T, P extends string> =
|
|
98
|
-
// P extends `${infer K}[${infer I}]${infer Rest}` // 处理 array[index] 形式
|
|
99
|
-
// ? K extends keyof T
|
|
100
|
-
// ? T[K] extends Array<infer U>
|
|
101
|
-
// ? I extends `${number}`
|
|
102
|
-
// ? Rest extends ''
|
|
103
|
-
// ? U
|
|
104
|
-
// : Rest extends `.${infer RestPath}`
|
|
105
|
-
// ? FieldPathValue<U, RestPath>
|
|
106
|
-
// : never
|
|
107
|
-
// : never
|
|
108
|
-
// : never
|
|
109
|
-
// : never
|
|
110
|
-
// : P extends `${infer K}.${infer Rest}` // 处理 key.rest 或 array.index 形式
|
|
111
|
-
// ? K extends keyof T
|
|
112
|
-
// ? T[K] extends Array<infer U>
|
|
113
|
-
// ? Rest extends `${number}${infer IndexRest}`
|
|
114
|
-
// ? IndexRest extends ''
|
|
115
|
-
// ? U // 简单的数组索引访问 (array.0)
|
|
116
|
-
// : IndexRest extends `.${infer RestPath}`
|
|
117
|
-
// ? FieldPathValue<U, RestPath> // 嵌套路径 (array.0.field)
|
|
118
|
-
// : never
|
|
119
|
-
// : FieldPathValue<T[K], Rest> // 其他嵌套对象字段
|
|
120
|
-
// : FieldPathValue<T[K], Rest>
|
|
121
|
-
// : never
|
|
122
|
-
// : P extends keyof T // 简单的顶层键访问
|
|
123
|
-
// ? T[P]
|
|
124
|
-
// : P extends `${number}` // 对于顶层数组路径
|
|
125
|
-
// ? T extends Array<infer U>
|
|
126
|
-
// ? U
|
|
127
|
-
// : never
|
|
128
|
-
// : never;
|
|
129
|
-
|
|
130
73
|
// use object replace Record<string, any>, fix issue 933
|
|
131
74
|
export interface BaseFormApi<T extends object = any> {
|
|
132
75
|
/** get value of field */
|
|
@@ -196,6 +139,7 @@ export interface InternalFieldApi {
|
|
|
196
139
|
reset: () => void;
|
|
197
140
|
validate: (val: any, opts: CallOpts) => Promise<unknown>
|
|
198
141
|
}
|
|
142
|
+
|
|
199
143
|
export interface FieldStaff {
|
|
200
144
|
field: string;
|
|
201
145
|
fieldApi: InternalFieldApi;
|
|
@@ -33,17 +33,15 @@ export interface FormState<T extends Record<string, any> = any> {
|
|
|
33
33
|
export interface setValuesConfig {
|
|
34
34
|
isOverride: boolean;
|
|
35
35
|
}
|
|
36
|
+
export type FieldPath<T> = T extends object ? {
|
|
37
|
+
[K in keyof T]: T[K] extends object ? `${string & K}.${FieldPath<T[K]>}` | `${string & K}` : `${string & K}`;
|
|
38
|
+
}[keyof T] : never;
|
|
39
|
+
export type FieldPathValue<T, P extends FieldPath<T>> = P extends `${infer K}.${infer Rest}` ? K extends keyof T ? Rest extends FieldPath<T[K]> ? FieldPathValue<T[K], Rest> : never : never : P extends keyof T ? T[P] : never;
|
|
36
40
|
export type ScrollToErrorOptions<K> = {
|
|
37
41
|
field?: K;
|
|
38
42
|
index?: number;
|
|
39
43
|
scrollOpts?: ScrollIntoViewOptions;
|
|
40
44
|
};
|
|
41
|
-
type ArrayIndexPath<K extends string | number, U> = `${K}[${number}]` | `${K}[${number}].${FieldPath<U>}` | `${K}.${number}` | `${K}.${number}.${FieldPath<U>}`;
|
|
42
|
-
export type FieldPath<T> = T extends Array<infer U> ? `${number}` | `${number}.${FieldPath<U>}` : T extends object ? {
|
|
43
|
-
[K in keyof T]: K extends string ? T[K] extends Array<infer U> | object ? `${K}` | `${K}.${FieldPath<T[K]>}` | ArrayIndexPath<K, U> : `${K}` : never;
|
|
44
|
-
}[keyof T] : never;
|
|
45
|
-
type ArrayFieldPathValue<T, P extends string> = P extends `${infer K}[${infer I}]${infer Rest}` ? K extends keyof T ? T[K] extends Array<infer U> ? I extends `${number}` ? Rest extends '' ? U : Rest extends `.${infer RestPath}` ? FieldPathValue<U, RestPath> : never : never : never : never : never;
|
|
46
|
-
export type FieldPathValue<T, P extends string> = ArrayFieldPathValue<T, P> | (P extends `${infer K}.${infer Rest}` ? K extends keyof T ? FieldPathValue<T[K], Rest> : never : P extends keyof T ? T[P] : never);
|
|
47
45
|
export interface BaseFormApi<T extends object = any> {
|
|
48
46
|
/** get value of field */
|
|
49
47
|
getValue: <P extends FieldPath<T>>(field?: P) => FieldPathValue<T, P>;
|
|
@@ -138,4 +136,3 @@ export interface FormUpdaterContextType {
|
|
|
138
136
|
getArrayField: (arrayField: string) => ArrayFieldStaff;
|
|
139
137
|
updateArrayField: (arrayField: string, updateValue: any) => void;
|
|
140
138
|
}
|
|
141
|
-
export {};
|
|
@@ -33,17 +33,15 @@ export interface FormState<T extends Record<string, any> = any> {
|
|
|
33
33
|
export interface setValuesConfig {
|
|
34
34
|
isOverride: boolean;
|
|
35
35
|
}
|
|
36
|
+
export type FieldPath<T> = T extends object ? {
|
|
37
|
+
[K in keyof T]: T[K] extends object ? `${string & K}.${FieldPath<T[K]>}` | `${string & K}` : `${string & K}`;
|
|
38
|
+
}[keyof T] : never;
|
|
39
|
+
export type FieldPathValue<T, P extends FieldPath<T>> = P extends `${infer K}.${infer Rest}` ? K extends keyof T ? Rest extends FieldPath<T[K]> ? FieldPathValue<T[K], Rest> : never : never : P extends keyof T ? T[P] : never;
|
|
36
40
|
export type ScrollToErrorOptions<K> = {
|
|
37
41
|
field?: K;
|
|
38
42
|
index?: number;
|
|
39
43
|
scrollOpts?: ScrollIntoViewOptions;
|
|
40
44
|
};
|
|
41
|
-
type ArrayIndexPath<K extends string | number, U> = `${K}[${number}]` | `${K}[${number}].${FieldPath<U>}` | `${K}.${number}` | `${K}.${number}.${FieldPath<U>}`;
|
|
42
|
-
export type FieldPath<T> = T extends Array<infer U> ? `${number}` | `${number}.${FieldPath<U>}` : T extends object ? {
|
|
43
|
-
[K in keyof T]: K extends string ? T[K] extends Array<infer U> | object ? `${K}` | `${K}.${FieldPath<T[K]>}` | ArrayIndexPath<K, U> : `${K}` : never;
|
|
44
|
-
}[keyof T] : never;
|
|
45
|
-
type ArrayFieldPathValue<T, P extends string> = P extends `${infer K}[${infer I}]${infer Rest}` ? K extends keyof T ? T[K] extends Array<infer U> ? I extends `${number}` ? Rest extends '' ? U : Rest extends `.${infer RestPath}` ? FieldPathValue<U, RestPath> : never : never : never : never : never;
|
|
46
|
-
export type FieldPathValue<T, P extends string> = ArrayFieldPathValue<T, P> | (P extends `${infer K}.${infer Rest}` ? K extends keyof T ? FieldPathValue<T[K], Rest> : never : P extends keyof T ? T[P] : never);
|
|
47
45
|
export interface BaseFormApi<T extends object = any> {
|
|
48
46
|
/** get value of field */
|
|
49
47
|
getValue: <P extends FieldPath<T>>(field?: P) => FieldPathValue<T, P>;
|
|
@@ -138,4 +136,3 @@ export interface FormUpdaterContextType {
|
|
|
138
136
|
getArrayField: (arrayField: string) => ArrayFieldStaff;
|
|
139
137
|
updateArrayField: (arrayField: string, updateValue: any) => void;
|
|
140
138
|
}
|
|
141
|
-
export {};
|
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@douyinfe/semi-foundation",
|
|
3
|
-
"version": "2.76.0
|
|
3
|
+
"version": "2.76.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"build:lib": "node ./scripts/compileLib.js",
|
|
7
7
|
"prepublishOnly": "npm run build:lib"
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"@douyinfe/semi-animation": "2.76.0
|
|
11
|
-
"@douyinfe/semi-json-viewer-core": "2.76.0
|
|
10
|
+
"@douyinfe/semi-animation": "2.76.0",
|
|
11
|
+
"@douyinfe/semi-json-viewer-core": "2.76.0",
|
|
12
12
|
"@mdx-js/mdx": "^3.0.1",
|
|
13
13
|
"async-validator": "^3.5.0",
|
|
14
14
|
"classnames": "^2.2.6",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"*.scss",
|
|
30
30
|
"*.css"
|
|
31
31
|
],
|
|
32
|
-
"gitHead": "
|
|
32
|
+
"gitHead": "c5a769551242f561bc5a64379af17bf45548b568",
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"@babel/plugin-transform-runtime": "^7.15.8",
|
|
35
35
|
"@babel/preset-env": "^7.15.8",
|