Левая часть выражения присваивания не может быть константой или свойством только для чтения.
Когда я использую эту строку на моем сервере Express, она хорошо работает в TypeScript 1.x
mongoose.Promise = global.Promise;
(Использование mongoose.Promise = global.Promise;
это из мангуста документа)
После обновления до TypeScript 2.x, он показывает эту ошибку в терминале и не позволяет мне запустить сервер.
Левая часть выражения присваивания не может быть константой или свойством только для чтения.
Как я могу решить это? Спасибо
1 ответ
Это потому что в es6
все переменные модуля считаются постоянными.
В 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()
.