校验逻辑支持返回更多原始信息,拓展 IValidateResult 能力 #3949
Replies: 4 comments 7 replies
-
@janryWang 这个问题可以帮忙看看吗?一些复杂的表单场景,会有一些特殊的错误处理逻辑。 这个改动个人评估是兼容性变更,且开发工作量不大。如果觉得建议可行,愿意采纳,我也可以进行开发与PR. |
Beta Was this translation helpful? Give feedback.
-
先聊聊你们的需求场景?具体是要做什么?为什么需要附带信息?因为我理解校验信息的唯一消费方就是组件 |
Beta Was this translation helpful? Give feedback.
-
Schema 和 Core 的类型这块,其实还有一个问题: 现在很多地方是直接包了一层 stringify 的, 就是有个自带的 比如 setDisplay setPattern,其实现在就什么参数都是合法的了,但是本身TypeScript应该提供这种校验能力的。 类型本身是不包含 export ISchema = {}
export ISchemaStringify = Stringify<ISchema> |
Beta Was this translation helpful? Give feedback.
-
请问这个有进展吗? 我也需要这个能力。这个大大增加了可扩展能力。 |
Beta Was this translation helpful? Give feedback.
-
现状
当前的校验逻辑,校验函数只能返回 IValidateResult 数据,数据中仅包含了一条 message 信息。对于一个复杂的校验逻辑,其中可能包含了许多其他的原始信息,这些原始信息可以用于其他的业务场景,甚至是复杂的表单展示。
典型的场景有:自定义滚动到指定页面位置(一个DomSelectorID)、自定义组件展示信息、原始的请求 Error。
formily/packages/validator/src/types.ts
Lines 17 to 42 in 8861ef5
目前的类型设计上,message 部分情况为 string,部分情况为 any。any的情况如下。
formily/packages/core/src/types.ts
Lines 121 to 143 in 8861ef5
这里虽然可以通过类型 hack,通过 message 返回一个 object 类型,但是这样会导致目前已有的 UI 适配库都需要改动,而且类型也不严格准确。
提议
在 IValidateResult 中,新增 info 字段,允许返回 IValidateResult 时额外捎带一个信息字段,可以在字段中包含更多信息。
主要改动点
改动 /packages/validator/src/validator.ts 文件,同时处理 message 和 info 信息。info 字段类型为 any。
formily/packages/validator/src/validator.ts
Lines 18 to 39 in 8861ef5
Beta Was this translation helpful? Give feedback.
All reactions