Skip to content

object-grid 声明的 data 输入类型是 array(内联行),而契约类型是 ViewData(对象)—— 照设计器写出的元数据 spec 解析不过 #5090

Description

@yinlianghui

发现于 #5065 的实施(plugin-grid README 示例键面重写)。Filed unassigned, not claiming.

#5065 是 README 侧;本卡是声明面与契约类型不一致,另一性质,按纪律不夹带进那个 PR。

现象

同一个 data 键,三处说法不同:

说的是什么
packages/plugin-grid/src/index.tsx:154(GRID_QUERY_INPUTS){ name: 'data', type: 'array', label: 'Static Data', description: 'Inline rows, …' } —— 声明成数组
packages/types/src/objectql.ts:556data?: ViewData —— ViewData 是 spec 的辨识联合对象(provider: 'object' | 'api' | 'value' | 'schema',每支 strict);内联行那一档是 { provider: 'value', items: [...] }
packages/plugin-grid/src/ObjectGrid.tsx:392(getDataConfig)if (Array.isArray(schema.data)) → 转成 { provider: 'value', items: schema.data } —— 运行时两种都吃

GRID_QUERY_INPUTS 是发布给设计器面板与生成 sdui-intrinsics.d.ts 的那份声明面
(该块的注释明确说,发布它的目的正是「让 manifest、.d.ts、设计器与渲染器终于一致」)。
所以照它写 data: [ …行… ] 的作者:

  • 运行时能跑(靠 getDataConfig 的数组容忍支路);
  • tsc 不过 —— ObjectGridSchema['data']ViewData,数组不属于任何一支;
  • 严格按 spec 解析同样不过。

顺带:该 description 写「the deprecated staticData is the same thing」。staticData
(objectql.ts:637,any[],已 @deprecated)确实就是数组档 —— 也就是说 data 的这条
声明实际描述的是那个已弃用键的形状,而不是 data 自己的。

复核方式

sed -n '154p' packages/plugin-grid/src/index.tsx
grep -n 'data?: ViewData' packages/types/src/objectql.ts
sed -n '388,400p' packages/plugin-grid/src/ObjectGrid.tsx # Array.isArray 容忍支路

编译探针(strict、对 dist/index.d.ts):

const a: ObjectGridSchema = { type: 'object-grid', objectName: 'u', data: [{ id: 1 }] };

TS2322,右侧列出 provider: 'object' | 'api' | 'value' | 'schema' 四支,数组不在其中。

同族

分级

交 PM 分诊。今天没有人被报错拦住(运行时容忍),但设计器教出来的元数据过不了 spec 解析。

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingpm:queue

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions