接口返回值直接赋给带联合类型的字段,编辑器提示 TS2322 Type ‘string’ is not assignable to type ‘number | undefined’,可这个值在别的地方明明能当数字用,改回去又报错。日志里能对上时间点,这种反而好排。

联合类型只接受声明里的成员之一,函数返回类型写成字符串后,运行时恰好是数字也不会被兼容,中间少了一次判断或者类型守卫,赋值这一步就卡住。这一点先确认清楚,后面就不用反复试。

const raw = resp.value; // string
const num = typeof raw === 'number' ? raw : Number(raw);
const item: Item = { id: num };

这次卡住的地方就在「TS2322 联合类型」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。

报错里带路径的,先去看那个路径在不在、权限对不对。

处理上按这个顺序:先打印出真实返回值 确认声明和实现对不上;在赋值之前用 typeof 做一次类型守卫;改接口声明而不是随手 as any 糊过去。

结果对不对很好判断,守卫加上之后 TS2322 消失,打印出来的 id 确实是数字,接口返回值也恢复提示。

作者 9823189