在 objectui#3161(objectstack#4115 台账批次 7)对读 @object-ui/fields 与 spec 的 FieldWidgetProps 时发现,未在该 PR 修复(属行为变更)。
事实
@objectstack/spec/ui 的 FieldWidgetPropsSchema 是字段 widget 插件的 props 契约,它声明:
| spec 键 |
objectui FieldWidgetComponentProps |
error?: string |
无——本地叫 errorMessage?: string |
required: boolean(带 .default()) |
无 |
readonly: boolean(带 .default()) |
readonly?: boolean |
field: { name?, label?, type: FieldType } |
field: FieldMetadata(更宽) |
也就是说:一个照着 spec 声明的 props 契约写出来的第三方字段 widget,放进 objectui 后校验消息不会显示,因为 objectui 传的是 errorMessage,widget 读的是 error;而且没有任何东西会报错——[key: string]: any(objectui#3221)让 props.error 成为合法读取,恒为 undefined。
需要拍板的是方向,不是修法
三种都成立,选哪个取决于 spec 的 FieldWidgetPropsSchema 是不是真的想当第三方 widget 的契约:
- objectui 改名跟随 spec(
errorMessage → error):48 个 widget + 调用点,一次性对齐,spec 成为唯一契约;
- spec 改名跟随实现(
error → errorMessage):spec 侧改动小,但 error 这个名字在 spec 里已经发布;
- spec 退掉这份 props 契约:如果它从来不是给第三方 widget 用的(没有任何运行时读它),那它是一份"声明了但没人执行"的 schema,按 ADR-0049 enforce-or-remove 处理。
同类问题还有 required——spec 声明、objectui 的 widget 一律不接收(必填标记由外层 FieldContainer 画)。
关联:objectstack#4115、objectui#3161、objectui#3221。
在 objectui#3161(objectstack#4115 台账批次 7)对读
@object-ui/fields与 spec 的FieldWidgetProps时发现,未在该 PR 修复(属行为变更)。事实
@objectstack/spec/ui的FieldWidgetPropsSchema是字段 widget 插件的 props 契约,它声明:FieldWidgetComponentPropserror?: stringerrorMessage?: stringrequired: boolean(带.default())readonly: boolean(带.default())readonly?: booleanfield: { name?, label?, type: FieldType }field: FieldMetadata(更宽)也就是说:一个照着 spec 声明的 props 契约写出来的第三方字段 widget,放进 objectui 后校验消息不会显示,因为 objectui 传的是
errorMessage,widget 读的是error;而且没有任何东西会报错——[key: string]: any(objectui#3221)让props.error成为合法读取,恒为undefined。需要拍板的是方向,不是修法
三种都成立,选哪个取决于 spec 的
FieldWidgetPropsSchema是不是真的想当第三方 widget 的契约:errorMessage→error):48 个 widget + 调用点,一次性对齐,spec 成为唯一契约;error→errorMessage):spec 侧改动小,但error这个名字在 spec 里已经发布;同类问题还有
required——spec 声明、objectui 的 widget 一律不接收(必填标记由外层FieldContainer画)。关联:objectstack#4115、objectui#3161、objectui#3221。