当我在我的 Express 服务器上使用这一行时,它在 TypeScript 1.x 中运行良好
mongoose.Promise = global.Promise;
(的用法mongoose.Promise = global.Promise;
来自猫鼬文档)
更新到 TypeScript 2.x 后,它在终端中显示此错误,并且不会让我启动服务器。
赋值表达式的左侧不能是常量或只读属性。
我该如何解决这个问题?谢谢
当我在我的 Express 服务器上使用这一行时,它在 TypeScript 1.x 中运行良好
mongoose.Promise = global.Promise;
(的用法mongoose.Promise = global.Promise;
来自猫鼬文档)
更新到 TypeScript 2.x 后,它在终端中显示此错误,并且不会让我启动服务器。
赋值表达式的左侧不能是常量或只读属性。
我该如何解决这个问题?谢谢
这是因为在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()
.