web-dev-qa-db-ja.com

代入式の左辺を定数または読み取り専用プロパティにすることはできません

Expressサーバーでこの行を使用すると、TypeScript1.xで正常に機能します。

mongoose.Promise = global.Promise;

mongoose.Promise = global.Promise;の使用法は マングース文書 からです)

TypeScript 2.xに更新した後、ターミナルにこのエラーが表示され、サーバーを起動できません。

代入式の左側は、定数または読み取り専用プロパティにすることはできません。

どうすればこれを解決できますか?ありがとう

18
Hongbo Miao

これは、_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;
_
33
derenio

この手法を使用して、型チェックとインテリセンスを維持する方法もあります。

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

1
Paul Shippy