Skip to content

全仓唯一一条 PageNodeSchema['type'] === 'page' 的钉扎,住在一个已不引用它的包里 #3227

Description

@os-zhuang

在 objectui#3223(删除 @object-ui/layout 的死渲染器 PageNodeRenderer)验收时记下的后续,不在该 PR 处理(超出那单的 packages/layout/ 范围)。

现状

packages/layout/src/__tests__/spec-symbol-batch7.test.ts 里有一条编译期断言,钉住 spec 的页面节点判别式:

type _NodeIsATaggedNode = Assert<Equal<PageNodeSchema['type'], 'page'>>;

它是全仓唯一一条钉这件事的断言,而它守的那个键正是 @object-ui/componentsPageRenderer 注册的键。#3223 删掉 PageNodeRenderer刻意保留了它:被删的是组件,活下来的是 wire 契约。

问题

保留是对的,但它现在的住处不对:@object-ui/layout 已经完全不引用 PageNodeSchema。于是这条断言处在一个尴尬位置——

  • 它出现在一个名为 spec-symbol-batch7(一次已完成的改名批次)的测试文件里,文件名说的是历史,不是它现在的职责;
  • 下一个清理 packages/layout 测试的人,看到一个不引用 PageNodeSchema 的包里有一条关于 PageNodeSchema 的断言,合理的反应是"这是上一轮重构的残留",然后删掉——全仓对这个 wire 判别式的唯一保护就没了,且没有任何东西会报红

这就是"守卫本身没有守卫"的形态:一条覆盖不会被测试发现其消失。

建议

搬到 packages/types(它 re-export spec 的类型,是这条断言的自然归属),或搬到 @object-ui/componentsPageRenderer 注册点旁边(它是这个键的实际拥有者)。两处都比现在合理;倾向 packages/types,因为这条钉的是类型契约而非某个渲染器的行为。

搬迁时把注释写清楚它钉的是什么、为什么不能删——现在 packages/layout 那份注释已经被 #3223 改写过一轮("重命名的对象已被删除,活下来的是分层拆分本身"),搬过去要再改一次,让它对新住处成立。

不要在搬迁中顺手放宽或删除这条断言。 若发现别处已有等价覆盖(我查的时候没有),核实后再决定是否合并两处。

关联:objectui#3223、objectui#3161 / objectstack#4115 batch 7。

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions