症状
编译器报 TS2322,消息中给出源类型与目标类型。失败可能是真实的不匹配,但也常来自类型推断:值被推断得比联合成员更宽、对象字面量多出属性,或目标标记为可选而实际必填。对照消息两侧通常就能判断是哪一种。
诊断
运行 tsc –noEmit 读取两侧类型;检查字面量是否被意外放宽;核对接口字段的必选与可选标记。
npx tsc --noEmit
根因
TypeScript 为值推断出的类型不能赋值给声明的目标,原因是真实不匹配、意外放宽,或形状与预期接口不同。
修复
让两侧一致:转换值、用 as const 或显式类型标注字面量、补齐可选标记,或调整目标以包含该值。避免用 any 强制转换,那只是压制检查而未修复问题。
验证
重新运行类型检查确认错误消失,再跑测试确认运行时行为仍符合预期。类型通过但行为出错不算真正修复。
常见陷阱
滥用 as any 会扩散未检查类型,掩盖后续错误;应优先修正类型定义。