我正在运行 Node v12、Express v4.16.4 和 Typescript 版本 3.8.3 并使用 VSCode。
这段代码近 8 个月以来一直没有变化,我们在每个路由器中都使用它。
export interface ICustomRequest extends Request {
district: string;
}
这几个月来一切都运转良好。我团队中的每个其他人都使用与我相同的代码,并且仍然没有任何问题。今天早上突然——由于所有路由器中涉及 req.query 的错误,我的代码都无法编译。
诸如此类的事情:
public async get(req: ICustomRequest, res: Response, next: NextFunction) {
try {
const property = req.query.property;
let results: await doTheThing(property);
res.json(results);
} catch (error) {
next(error);
}
}
其中 req.query.property 抛出错误,例如:“错误 TS2345:‘string | Query | (string | Query)[]’类型的参数不可分配给‘string’类型的参数。 类型“查询”不可分配给类型“字符串”。”
我不明白为什么突然间这成为我项目中每个文件中的一个全面问题,而其他三个开发人员没有这个问题,而且我们都使用相同的版本。如果我添加 .toString() 它可以工作,但是当其他人没有问题时,我不能证明只为我自己修改 202 个实例是合理的。关于我的环境有什么想法会导致这些打字问题吗?
我尝试过的事情:
从上游完全重新克隆我的项目。重新安装 Node 。重新安装 typescript 。 npm 缓存清理。删除 Node 模块并重新安装。删除 package-lock.json。
最佳答案
这是安装没有严格定义依赖项的“@types”包时的典型问题。我猜 NPM 已经安装了最新版本的 @types/express
。
尝试降级到4.16.11或更高版本(可以一一尝试)。
"devDependencies": {"@types/express": "4.16.11"}
给 future 的教训。始终将正确的 package-lock.json 提交到存储库。这应该可以防止此类问题。
关于javascript - 为什么扩展的 Express Request 突然中断了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61260891/