← 中文资源

简体中文版本

TypeScript 报 TS2322: 类型不可赋值给目标类型

通过对齐声明类型与实际类型、放宽过窄字面量或正确收窄联合类型,解决 TS2322。

阅读英文原文

症状

编译器报 TS2322,消息中给出源类型与目标类型。失败可能是真实的不匹配,但也常来自类型推断:值被推断得比联合成员更宽、对象字面量多出属性,或目标标记为可选而实际必填。对照消息两侧通常就能判断是哪一种。

诊断

运行 tsc –noEmit 读取两侧类型;检查字面量是否被意外放宽;核对接口字段的必选与可选标记。

npx tsc --noEmit

根因

TypeScript 为值推断出的类型不能赋值给声明的目标,原因是真实不匹配、意外放宽,或形状与预期接口不同。

修复

让两侧一致:转换值、用 as const 或显式类型标注字面量、补齐可选标记,或调整目标以包含该值。避免用 any 强制转换,那只是压制检查而未修复问题。

验证

重新运行类型检查确认错误消失,再跑测试确认运行时行为仍符合预期。类型通过但行为出错不算真正修复。

常见陷阱

滥用 as any 会扩散未检查类型,掩盖后续错误;应优先修正类型定义。