症状与错误信息
运行 TypeScript 代码时,运行时抛出以下错误(错误信息保留英文原文):
error TS2769: Type "Promise<T>" is not assignable to type "T"
该错误表明:诊断因 async 函数返回在类型位置未 await 导致 TypeScript 报告 Promise
根因分析
根本原因是:forgetting await means the expression type is promise
诊断步骤
首先在隔离环境中复现错误,剥离除最小触发路径外的所有代码。获得最小复现后,检查失败点的每个变量:本应为对象却为 undefined、类型不符、引用过期、索引越界等。错误信息说明“出了什么问题”,周围状态说明“为什么出问题”。
修复与代码示例
// 修复前(有缺陷)
// ... 触发错误的代码 ...
// 修复后(已修正)
// ... 加入守卫或类型检查的修正代码 ...
修复直接针对根因:add await before the async call, or change the return type to promise
验证
Run tsc and confirm the type is T, not Promise
常见陷阱
常见错误是用 try/catch 或条件判断抑制错误而不处理根因。这只是掩盖症状,缺陷逻辑仍在,错误会以不同形式再次出现。务必修复根因而非仅消除错误信息。另一陷阱是只修了正常路径而忽略空输入、null 值、并发访问等边界情况。