Expressサーバーでこの行を使用すると、TypeScript1.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()
のようなモックフレームワークを必要とせずに、モジュール内の特定の関数のみをモック関数でオーバーライドするのに役立つ方法です。