赋值表达式的左侧不能是常量或只读 属性

Left-hand side of assignment expression cannot be a constant or a read-only property

当我在我的 Express 服务器上使用这一行时,它在 TypeScript 中运行良好1.x

mongoose.Promise = global.Promise;

mongoose.Promise = global.Promise;的用法来自the mongoose document

更新到 TypeScript 2.x 后,它在终端中显示此错误,并且不让我启动服务器。

Left-hand side of assignment expression cannot be a constant or a read-only property.

我该如何解决这个问题?谢谢

这是因为在es6中所有模块的变量都被认为是常量

https://github.com/Microsoft/TypeScript/issues/6751#issuecomment-177114001

TypeScript 2.0 中修复了错误(不报告此错误)。

由于 mongoose 仍在使用 commonjs - var mongoose = require("mongoose") - 而不是 es6 导入语法(用于打字),您可以抑制错误假设模块的类型为 any.

解决方法:

(mongoose as any).Promise = global.Promise;

还有一种方法可以使用这种技术来维护类型检查和智能感知。

import * as mongoose from "mongoose"; // same as const mongoose = require("mongoose");
type mongooseType = typeof mongoose;
(mongoose as mongooseType).Promise = global.Promise;
// OR
(<mongooseType>mongoose).Promise = global.Promise;

这是一种有用的方法,可以使用模拟函数仅覆盖模块中的某些函数,而无需像 jest.mock().

这样的模拟框架