类型声明
本节只说明 @silver-formily/react 自己定义的公开类型,以及它在 React 侧如何消费其他包的类型。
如果某个类型本来就属于 @silver-formily/core、@silver-formily/path、@silver-formily/validator 或 @silver-formily/json-schema,这里不会重复维护原始声明,而是给出稳定入口与跳转链接。
什么时候应该从 @silver-formily/react 导入
- 类型里直接出现了 React 组件、组件映射、作用域对象或递归渲染配置。
- 你要描述的是 React 组件 props,而不是 Core 的字段模型本身。
- 你需要和
SchemaField、RecursionField、ExpressionScope这类 React 组件保持一致。
类型地图
| 分类 | 推荐查看 | 说明 |
|---|---|---|
| 字段组件 props | Field | 解释 IFieldProps、IVoidFieldProps、RenderPropsChildren 这些 React 侧封装。 |
| 路径桥接 | Path | React 包只消费 FormPathPattern,不重新定义路径协议。 |
| 校验桥接 | Validator | 字段 validator 直接复用 @silver-formily/core 的 FieldValidator。 |
| Schema 协议 | Schema | Schema、ISchema、SchemaKey 与 x-* 协议都属于 json-schema 包。 |
React 特有类型
字段与上下文
JSXComponent:React 侧的组件类型约束,keyof React.JSX.IntrinsicElements或组件构造器。IProviderProps:FormProvider的 props,包含必填的form与可选的children。IFormSpyProps:FormConsumer的 props,children是(form: Form) => React.ReactNode。RenderPropsChildren<Payload>:字段组件的children,是渲染函数(field, form) => ReactNode或普通ReactNode。DecoratorContent:装饰器内容(对应x-decorator-content),纯内容或具名 prop 映射。IFieldProps<D, C>:字段组件 props,在 Core 的IFieldFactoryProps基础上扩展了 React 语义的children、decoratorContent、decorator、component。IVoidFieldProps<D, C>:VoidField组件 props,来源与IFieldProps类似。IExpressionScopeProps/IRecordScopeProps/IRecordsScopeProps:ExpressionScope、RecordScope、RecordsScope的 props。
组件映射与状态映射
IComponentMapper<T>:把一个组件转换成另一个组件,常用于connect一类适配器。IStateMapper<Props>:把字段状态映射为组件 props,可以用对象映射,也可以用函数映射。
Schema 渲染
SchemaReactComponents:SchemaField组件映射表,键是 schema 中引用的组件名。ISchemaFieldReactFactoryOptions:createSchemaField的 React 配置入口,主要包括components和scope。ISchemaFieldProps:SchemaField组件 props。ISchemaMapper/ISchemaFilter:递归渲染时对 schema 节点进行映射或过滤。IRecursionFieldProps:RecursionField组件 props,其中basePath来自路径系统。ISchemaMarkupFieldProps/ISchemaTypeFieldProps:Markup Schema 字段协议,保留了 React 组件映射能力。
辅助泛型
KeyOfReactComponent<T>:从组件对象中排除contextTypes、displayName等静态键。ReactComponentPath<T>:从组件映射对象里提取可用的字符串 key。ReactComponentPropsByPathValue<T, P>:根据组件 key 反推出该组件 props。Path<T>/PathValue<T, P>:对象深层路径与取值泛型。ReactChild:已弃用的兼容别名React.ReactElement | string | number,新代码使用React.ReactNode。
不在这里展开的类型
- 字段模型、表单模型、
Field、GeneralField、Form:请查看 Formily Core 文档 与 Form。 - 路径系统、
FormPathPattern:请查看 Path 文档。 - 校验规则、
Validator、FieldValidator:请查看 Validator 文档。 - Schema 协议、
Schema、ISchema、SchemaKey:请查看 JSON Schema 文档。
导入建议
ts
import type {
IFieldProps,
IRecursionFieldProps,
ISchemaFieldProps,
SchemaReactComponents,
} from '@silver-formily/react'如果只是想复用底层模型,请直接从源包导入,这样类型来源会更清晰:
ts
import type { Form, GeneralField } from '@silver-formily/core'
import type { ISchema } from '@silver-formily/json-schema'
import type { Pattern } from '@silver-formily/path'
import type { Validator } from '@silver-formily/validator'其他公开类型与导出边界
ConnectedComponent<T>:connect的返回类型,保留 ref 类型和自定义静态成员。ISchemaFieldOptionContext:{ components: SchemaReactComponents };该兼容类型仍导出,但SchemaOptionsContext实际使用ISchemaFieldReactFactoryOptions。ObjectKey:string | number | boolean | symbol。
Path<T> 是 TypeScript 工具类型,不是 @silver-formily/path 的运行时 Path 类。React 入口不再导出 JSON Schema API、reactive-react 的 hooks 或 IObserverProps / IObserverOptions,仅从 reactive-react 再导出 observer 和 Observer。内部 ReactiveField、useAttach 和 portal render 帮助函数不是公开入口导出。