常见报错排查
TS 报错信息看起来吓人,核心就这么几类:不能将类型 X 分配给 Y(赋值不匹配)、对象中缺少属性 Z(少了必填字段)、类型 X 上不存在属性 Y(拼错名或没这个属性)、隐式 any(函数参数没注解)。
排查套路:先看错误行号与两个类型的名字,多数情况是少写了可选标记 ?、对象字面量多了/少了字段。学会用 as 断言与 ! 非空断言快速绕过——但要克制,断言是"我确定"的契约,写多了等于关掉检查。
- 分配不匹配:检查接口定义与实际对象,多半少了 ? 或字段
- 类型上不存在属性:先怀疑拼写,再看是否要扩展类型声明
- 断言(as / !)是逃生舱,每用一次都要问自己"为什么类型不对"
interface User { id: number; name: string }
// ❌ 报错 1:不能将类型 string 分配给 number
const u1: User = { id: '1', name: '小明' };
// ✓ id 应传数字:{ id: 1, name: '小明' }
// ❌ 报错 2:对象中缺少属性 name(可选字段要加 ?)
const u2: User = { id: 1 };
// ✓ 改接口(name?: string)或补齐字段
// ❌ 报错 3:类型 User 上不存在属性 nam(拼错了)
// const n = u1.nam;
// ✓ 改成 u1.name
// 逃生舱:as 类型断言与 ! 非空断言
const el = document.querySelector('#app') as HTMLDivElement;
const value = el.textContent!.trim(); // 确定存在时才用 !// 类型全擦除后,正确版本运行如常: const u1 = { id: 1, name: '小明' }; console.log(u1.id, u1.name); const el = document.querySelector('#app'); if (el) console.log(el.textContent.trim());




