В левой части выражения присваивания не может быть константа или свойство только для чтения
Когда я использую эту строку на своем экспресс-сервере, она хорошо работает в TypeScript 1.x
mongoose.Promise = global.Promise;
(Использование mongoose.Promise = global.Promise;
от файла мангуста)
После обновления до TypeScript 2.x он показывает эту ошибку в терминале и не позволит запустить сервер.
Левая часть выражения присваивания не может быть константой или свойство только для чтения.
Как я могу это решить? Благодаря
Ответы
Ответ 1
Это потому, что в es6
переменные модуля считаются константами.
https://github.com/Microsoft/TypeScript/issues/6751#issuecomment-177114001
В TypeScript 2.0
исправлена ошибка (не сообщая об этой ошибке).
Так как mongoose
по-прежнему использует синтаксис commonjs
- var mongoose = require("mongoose")
- not the es6
импорта (который используется в типе), вы можете подавить ошибку, предположив, что модуль имеет тип any
.
Временное решение:
(mongoose as any).Promise = global.Promise;
Ответ 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()