Skip to content

element:text.content / element:button.label 是 #3832 那张表漏掉的第 6、7 个同形标本 —— 同一个矛盾,今天照样报 type-mismatch #4970

Closed

Description

@yinlianghui

发现于 #3832 的实施(PR 见下)。#3832 的裁定把范围钉在「五个实测标本」,这两个不在那张表里,所以本 PR 按不扩围处理,单独立卡。

机制

与 #3832 的四个 i18n 标本逐字同形:input 自己的 description 教作者写内联翻译映射,同一个 input 的 type: 'string' 又让 manifest 门对这个映射报 type-mismatch。

键 声明位 description 原文 spec 实测 渲染器
element:text.content packages/components/src/renderers/basic/elements.tsx:109 Accepts an inline translation map ({ en, "zh-CN", … }) 字符串 或 内联映射均 OK elements.tsx:98 走 pickLocalized
element:button.label packages/components/src/renderers/basic/elements.tsx:319 同上 同上 走 pickLocalized

两个键都 required: true,且两个块都在 PUBLIC_BLOCKS(public-blocks.ts:89 / :91),所以它们进 sdui.manifest.json 与 sdui-intrinsics.d.ts,是 AI 作者直接读到的发布面。

实测(objectui origin/main @ 1b21b1aaa,与 #3832 六个标本同一次探针)

element:text.content   (i18n map) -> warning/type-mismatch: prop "content" expected a string
element:button.label   (i18n map) -> warning/type-mismatch: prop "label"   expected a string

spec 侧(ComponentPropsMap,pin 在 @objectstack/spec 17.0.0-rc.6)对两个键的实测:string=OK i18n-map=OK number=no boolean=no。即门比契约窄一条臂,和 #3832 的五个标本同一根因。

修复

#3832 的机制部分已经落地(type 收粗类型数组,任一臂命中即过),所以这两处各是一行:

type: ['string', 'object']

修完请一并把它们挂进 apps/console/src/__tests__/component-input-union-specimens.test.ts(那个文件已经是标本验收面,每个标本带一条「不命中任何臂仍要报」的对照断言)。

为什么单独立卡而不是并进 PR

#3832 的维护者裁定逐字写的是「the five measured specimens」,这两个是本次实施中新测出来的,不在裁定的完成范围内 —— 按 Prime Directive #10 与本轮派发的不扩围要求单独记档,不搭 PR。范围小、判据已经写好,可以直接接批次。

关联:#3832(机制 + 五标本)、#4163(I18nLabel 渲染读点审计 —— 与本卡相反的方向:那边是渲染器丢掉映射形态,这两个键的渲染器已经解析映射)、#3808、AGENTS.md #0.1

Activity

  1. yinlianghui commented on Aug 17, 2026

    @yinlianghui
    CollaboratorAuthor

    同一次扫描里的一条相邻观察,不扩本卡范围,记在这里免得丢:

    packages/plugin-detail/src/renderers/record-alert.tsx:62-84 的 RecordAlertProps 把 title / body 都声明成 title?: string(两处:properties.* 与 flat 兼容那一份),而同一个文件 :126-127 是 pickLocalized(props.title, language) —— 即渲染器实际接受内联映射,它自己的 props 类型只说字符串。

    今天不咬人:这个 interface 没有导出(只做 React.FC<RecordAlertProps> 的参数),pickLocalized 收 unknown,所以 TS 不报、没有消费者被误导。但 #3832 的 PR 刚把 record:alert.title / .body 的发布面声明成 ['string','object'],所以这两处局部类型现在是包内唯一还说「只有字符串」的地方 —— 属于 #4581 那一族(声明比渲染器实际能力窄),尺度最小的一档。

    真要修就是两行 string | Record< string, string >(或直接用 spec 的 I18nLabel),和本卡的 elements.tsx 两处属于同一次收拾。是否值得单独排期交 PM 判。


    Generated by Claude Code

  2. self-assigned this
    on Aug 17, 2026
  3. yinlianghui commented on Aug 17, 2026

    @yinlianghui
    CollaboratorAuthor

    认领(objectui 分片 PM 座席,批次 20)。Session session_01GTRjn8xBqp75dk7kFupVRt,分支 claude/issue-4970-elements-i18n-arms,os-dev 子代理实施。

    派发前置已核:#3832 的机制与五标本已随 PR #4975 落 main(279fb139d),本卡两处各一行的前提成立。范围裁定:评论 5314024815 那条相邻观察(record-alert.tsx:62-84 两处未导出局部 props 类型仍写 title?: string,窄于其自身 pickLocalized 渲染与刚落地的发布面声明)并入本卡一次收拾 —— 同族、同验收面、两行,不值得再立卡排期。

    文件面:packages/components/src/renderers/basic/elements.tsx、apps/console/src/__tests__/component-input-union-specimens.test.ts、packages/plugin-detail/src/renderers/record-alert.tsx —— 与在飞四席(#4190/#4974 收尾中/#4976/#4941)不相交。


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions