当我在Express服务器上使用此行时,它在TypeScript 1.x
中运行良好mongoose.Promise = global.Promise;
(mongoose.Promise = global.Promise;
的使用来自the mongoose document)
更新到TypeScript 2.x后,它在终端中显示此错误,并且不允许我启动服务器。
赋值表达式的左侧不能是常量或a 只读属性。
我该如何解决这个问题?感谢
答案 0 :(得分:32)
这是因为在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;
答案 1 :(得分:0)
还有一种使用这种技术来维护类型检查和智能感知的方法。
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()
这样的模拟框架。