发现于 #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:556 | data?: 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 解析。
发现于 #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,数组不属于任何一支;顺带:该 description 写「the deprecated
staticDatais the same thing」。staticData(
objectql.ts:637,any[],已@deprecated)确实就是数组档 —— 也就是说data的这条声明实际描述的是那个已弃用键的形状,而不是
data自己的。复核方式
编译探针(strict、对
dist/index.d.ts):报
TS2322,右侧列出provider: 'object' | 'api' | 'value' | 'schema'四支,数组不在其中。同族
ObjectGridSchema.columns上容忍未声明的accessorKey/header拼写 —— 声明类型是 strict 的 ListColumn,#3104 的列身份门禁结构上看不见这条支路 #5068:columns上accessorKey/header的运行时容忍支路 —— 同一家族(strict 声明类型 + 运行时另开一条容忍支路),不同键。本卡额外多一层:容忍的那个形状还被声明面
正式发布了。
GRID_QUERY_INPUTS;本卡是补进去之后类型标注与契约不符的残留。分级
交 PM 分诊。今天没有人被报错拦住(运行时容忍),但设计器教出来的元数据过不了 spec 解析。