TS 报错文字密、又容易误导——TS 指的那一行往往不是真原因,七行”Type A is not assignable to type B”墙后藏着的可能是三个文件之外的一个 missing property。下面这些 Prompt 强制模型从报错行反推到真原因、区分”修代码 vs 修类型”,并给出最小 diff——不是大改也不是一句 as any 糊上。报错出在 React 树里可配合 React 组件重构 Prompt。
这套 Prompt 适合用在哪
- 日常 TS 开发
- 调库的类型问题
- JS → TS 迁移
- TS 代码 PR 评审
- 熟悉新 TS 代码库
1. 反推诊断
下面是一条 TS 报错。请从报错行反推真正原因。输出:(a) TS 以为哪里错;(b) 实际错在哪;(c) 最小修复 diff;(d) 修代码还是修类型。
报错:
{粘贴含文件名}
代码上下文:
{粘贴 20-30 行}
2. “Type X is not assignable to Y” 诊断
TS 报 "Type {X} is not assignable to type {Y}"。请诊断:(a) TS 期望什么;(b) 实际是什么;(c) X 与 Y 的结构差异;(d) 是真 bug 还是类型收窄问题。
代码:
{粘贴}
3. 泛型推断失败
TS 没能推断出某个泛型。下面是调用点。输出:(a) TS 尝试推哪些泛型;(b) 哪个参数让推断失败;(c) 能让它通过的显式注解;(d) 函数签名是否需要改。
{粘贴}
4. 条件类型调试
某条件类型选错分支。下面是类型定义和一个样本输入。请逐步走过每个条件,写出 TS 在每一步计算出什么。
{粘贴}
5. 模块解析诊断
TS 报 "Cannot find module {X}" 或 "Module {X} has no exported member {Y}"。请诊断:(a) tsconfig paths / moduleResolution;(b) package.json exports;(c) 声明文件;(d) 修复。
{粘贴错误 + tsconfig + package.json 节选}
6. excess property 检查的困惑
把对象赋给变量时多出的属性 TS 允许,但内联传参却不允许。下面是代码。请解释 TS 的 excess-property 检查规则,并给出正确处理方法。
{粘贴}
7. “类型保护没收窄” 诊断
我写了类型保护但 TS 仍报错。下面是代码。请诊断收窄失败原因:(a) 是不是非 user-defined guard;(b) 是不是值被中转重赋值;(c) async / 闭包丢失收窄;(d) 修复。
{粘贴}
8. .d.ts / ambient 声明审计
我项目用 {library} 但类型缺失或错误。请走一遍:(a) 是否随包发了类型;(b) 是否有 @types;(c) 是否要自写 .d.ts;(d) 自写 .d.ts 的骨架。
{粘贴 imports + 报错}
9. tsconfig strict 修复
我开了 {strict | noImplicitAny | strictNullChecks | exactOptionalPropertyTypes} 后多了 {N} 个错。下面挑 5 条代表性的。请逐条分类(真 bug / 只是类型 / 需要重构)并给修复模式。
{粘贴}
10. React 组件 prop 类型修复
我的 React 组件 props 报 TS 错。下面是组件 + 使用。请诊断:(a) prop 类型 vs 使用差异;(b) 泛型组件问题;(c) HOC 丢失类型;(d) 最小修复。
{粘贴}
11. zod / yup / runtime schema 与 TS 类型不一致
我的运行时 schema({zod / yup})与 TS 类型不一致。下面是 schema + 推断类型 + 手写类型。请诊断漂移并给保持同步的方案。
{粘贴}
12. “any” 大扫除
下面文件存在隐式 any。逐处列出、解释为什么 TS 推不出来、提议显式类型。按风险由高到低排。
{粘贴}
13. 迁移:JS → TS 一文件一步
我在把 {file.js} 迁移到 TS。下面是文件。请输出分步迁移计划:(a) 先引入哪些类型;(b) 对应运行时形态的 union / intersection 结构;(c) 哪些函数可以暂时宽松。
{粘贴}
14. TS 报错按影响分类
下面是 `tsc --noEmit` 的 30 条报错。请分类:(a) 真 bug(修代码);(b) 只是类型(修类型);(c) 需要重构;(d) 暂时注释抑制 + 原因。按影响范围排序。
{粘贴}
容易踩的坑
- 加
any让报错闭嘴——把 bug 推到运行时,问题更严重 - 完全信报错行——通常是真错位置的下游
- 直接
as强转而不去理解结构差——静态隐患 - 关
strict/noImplicitAny让 build 过——把用 TS 的全部意义都让出去了 - 跟类型系统对抗而不是重构底层形态
- 没把完整报错链贴上来——第二三行往往才是真元凶