// types/legacy-lib.d.ts
declare module 'legacy-lib' {
export function parse(s: string): unknown;
}
给一个没有类型的库手写了一份声明文件,tsc 编译一路绿灯,跑起来却报 Cannot read properties of undefined,在代码里引用的那个导出名字,运行时压根不存在。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,声明文件只承诺类型不校验真实导出,导出形式写成默认而包里其实是有名导出,或者声明没被包含进编译范围,编译器就照着这份假声明放行。
这次卡住的地方就在「d.ts 类型声明」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。
处理上按这个顺序:打开依赖包里的清单文件,核对入口和类型指向;核对声明文件里的导出形式和真实模块保持一致;把声明放进编译范围覆盖的目录再重启语言服务。
改完只确认一件事:运行时能取到真实导出,名字和打印结果一致,类型提示也不再错位。
