18

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

mongoose.Promise = global.Promise;

(的用法mongoose.Promise = global.Promise;来自猫鼬文档

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

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

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

4

2 回答 2

36

这是因为在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;
于 2016-08-08T16:08:37.680 回答
2

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

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().

于 2019-09-30T16:03:38.533 回答