Skip to content

ObjectView 用 (schema as any) 从 object-view 节点读 31 个键转发给 renderListView,其中 27 个不是 ObjectViewSchema 声明成员 —— #5091 在 ObjectView 上的同形实例 #5097

Description

@yinlianghui

发现于 #5077 的前提门复测(cast 感知口径复查卡面读点)。Filed unassigned, not claiming.

现象

packages/plugin-view/src/ObjectView.tsxrenderListView 委托分支(:980 起)用 (schema as any).K 从 object-view 节点上读 31 个不同的键并转发给宿主的列表渲染器。其中只有 4 个是 ObjectViewSchema 的声明成员,27 个不是 —— 「渲染器读得到、声明面否认」在 ObjectView 上仍然成立,与 #5091 在 ObjectGrid 上的形状相同。

证据(实测,base 9fbb9b52f)

读点枚举(grep -o 'schema as any)\.[A-Za-z_]*',排除 __tests__,31 个 distinct):

  • 声明成员的 4 个:datanavigationsearchableFieldsfilterableFields
  • 不是声明成员的 27 个:addDeleteRecordsInline, addRecord, addRecordViaForm, allowExport, allowPrinting, aria, bulkActions, clickIntoRecordDetails, collapseAllByDefault, color, compactToolbar, conditionalFormatting, emptyState, fieldTextColor, hiddenFields, inlineEdit, pagination, prefixField, resizable, rowActionDefs, rowActions, selection, sharing, showDescription, showRecordCount, userFilters, wrapHeaders

声明成员集取自构建产物 packages/types/dist/objectql.d.ts(checker.getPropertiesOfType,42 个,required 只有 objectName / type),与 #5077 卡面 ① 逐字一致。

可达性:该分支只在宿主传 renderListView 时进入。注册渲染器 ObjectViewRenderer(src/index.tsx:58-66)不传该 prop —— 全仓非测试唯一供给方是 packages/app-shell/src/views/ObjectView.tsx:1618(React 宿主)。即:这 27 个键在 app-shell 组合下生效,在 README/文档站教的 schema 注册路径上到不了

类型面完全没有牙(实测 tsc 6.0.3,strict,对构建产物):ObjectViewSchema extends BaseSchema,而 BaseSchema[key: string]: any,excess property 检查整体失效 ——

探针rc
{ type: 'object-view', objectName: 'products', pagination: true }(顶层未声明键)0,无诊断
{ type: 'object-view', objectName: 'users', table: { zzzNotAGridKey: 1 } }(嵌套 table 里的假名)0,无诊断
objectNameTS2741(唯一有牙的一条)

即嵌套的 table 子配置同样不设防,错拼这 27 个键里的任何一个都静默无声。

为什么值得单列

  1. AI 作者无法从类型面发现这 27 个键,也无法被 tsc 拦住错拼 —— 正是「声明=强制」要消除的静默成功类。
  2. 文档面无法合法地教它们:教了就把一个 as any 逃逸口固化成第二套事实契约(AGENTS.md #0.1);不教则 app-shell 组合下的既有行为无处记载。
  3. 它是 plugin-view README 整片 schema 键面渲染器一个都不读 —— object / viewMode / fields / mode / recordId / fieldConfig 全非声明成员,照抄即空视图 #5077 那类 README 键面漂移能长期不被发现的结构原因:object-view 节点上任何键都「看起来合法」。

其中 pagination 一键已经在 #5077 的逐键判定表里被记为「渲染器不读」—— 该格由本卡的 :1032 读点推翻,已在 #5077 上留证据评论。#5088(文档站镜像)的同一格同理。

同族

分级

交 PM 分诊(未打标签)。参照 #5091 同类被判 bug + needs-user-decision —— 本卡同样需要一次裁定:27 个键是声明上去(types 变更)、从转发块删掉、还是记为有理由的豁免

Metadata

Metadata

Assignees

Labels

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions