让 AI 用 satisfies 检查导航配置,保留类型推断
用 satisfies 审查配置键和值,保留表达式已有的类型信息。

导航表要覆盖三个栏目,每个栏目有标题和路径。直接标注成过于宽泛的 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 }>;
