TypeScript Interface校验仅提示单个错误 无法同时识别多个错误原因咨询
这是TypeScript对象字面量校验逻辑的设计限制,不属于Bug。
原因说明
TypeScript对显式标注了类型的对象字面量做校验时,会按优先级执行两类检查:
- 第一优先级:校验对象上已存在的、目标类型也包含的属性的类型是否匹配
- 第二优先级:校验对象上是否存在目标类型未定义的多余属性
如果第一优先级的检查就发现了错误,TypeScript会直接终止后续的第二优先级校验。你给出的示例中,saved属性类型不匹配属于第一优先级检查项,触发错误后就跳过了多余属性averageScore的校验,所以只会显示一处报错。当你注释掉saved的错误代码后,第一优先级校验通过,才会执行第二优先级检查,提示averageScore是多余属性。这种设计的初衷是避免基础类型不匹配时,输出大量无意义的多余属性错误,减少无效报错的干扰。
同时触发两处报错的方法
你可以拆分对象定义和类型赋值的步骤,就能同时拿到两个错误提示:
interface Saved { highScore?: number; levelsComplete?: number; } interface GameData { score: number; timeTaken?: number; saved?: Saved; } // 先定义原始对象,不标注类型 const rawGameData = { score: 0, timeTaken: 60, saved: [1, 2, 3], averageScore: 10, }; // 赋值给标注了类型的变量 const gameData: GameData = rawGameData;
内容的提问来源于stack exchange,提问作者thathurtabit
相关产品推荐
相关产品推荐

