@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 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-alpha.1",
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-alpha.1",
11
- "@douyinfe/semi-json-viewer-core": "2.76.0-alpha.1",
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": "3d4a73bf03fbe430dfa9d0c874800fd753b82295",
32
+ "gitHead": "c5a769551242f561bc5a64379af17bf45548b568",
33
33
  "devDependencies": {
34
34
  "@babel/plugin-transform-runtime": "^7.15.8",
35
35
  "@babel/preset-env": "^7.15.8",