全部文章
工具笔记

让 AI 用 satisfies 检查导航配置,保留类型推断

用 satisfies 审查配置键和值,保留表达式已有的类型信息。

资料核验2026.11.12 · TypeScript · 建议开启 strict 模式

导航表要覆盖三个栏目,每个栏目有标题和路径。直接标注成过于宽泛的 Record,可能把后续本可用的键和具体值信息丢掉。TypeScript 4.9 提供了 satisfies,用来确认表达式满足某个类型约束。

给 AI 的上下文与边界

交给助手真实的栏目联合类型和一个导航表。要求用 satisfies 检查必需键与每个值的形状,再给两个反例:缺一个栏目、路径误填数字。请它展示调用方最终能用到哪些推断信息。

流程示意:定义导航表;核对栏目与字段;验证推断结果

先用错误配置试一遍

把导航对象接上预期的记录类型,删掉一个必需栏目,再跑类型检查。错误应该落在配置定义处。把栏目的路径换成数字,也应被拒绝。修回后看后续代码是否仍能利用推断出的具体形状。

字面量是否被拓宽还受上下文等因素影响。确实需要只读字面量时,再考虑在表达式上使用 as const 并检查结果。

satisfies 检查源码里的表达式。若配置来自远端 JSON,还要做运行时校验。

可以直接照着做的演练

假设导航必须包含 home、notes 与 about。在临时类型检查文件中去掉 about,再把 notes.path 改成数字。恢复后检查调用方能否直接读出该对象实际拥有的字段。

检查生成结果

  • 正常配置通过。
  • 两个错误都在定义处报出。
  • 具体推断按项目 tsconfig 核对。确有字面量需求时再用 as const 并验明用途。

复查时追问一层

生成配置有时来自 JSON 或环境变量。satisfies 作用在 TypeScript 表达式上,外部文本仍需解析和校验。用项目安装的编译器实际检查,别把编辑器中的提示当成所有环境都一致。

让助手展示一次编译器诊断和一次可用推断。要是为了保留常量值给整张配置套上只读断言,检查之后是否有合法的动态更新需求。用 satisfies 的初衷是把约束放在定义处,避免使用处才发现键名不对。

用项目自己的编译器分别删掉 about、把 path 改成数字,观察错误位置。

type Section = 'home' | 'notes' | 'about';
const nav = {
  home: { path: '/' },
  notes: { path: '/notes/' },
  about: { path: '/about/' },
} satisfies Record<Section, { path: string }>;

资料来源