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

时间:2016-08-07 20:55:48

标签: express angular mongoose angular2-universal typescript2.0

当我在Express服务器上使用此行时,它在TypeScript 1.x

中运行良好
mongoose.Promise = global.Promise;

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

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

  

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

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

2 个答案:

答案 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()这样的模拟框架。