Подтвердить что ты не робот

В левой части выражения присваивания не может быть константа или свойство только для чтения

Когда я использую эту строку на своем экспресс-сервере, она хорошо работает в TypeScript 1.x

mongoose.Promise = global.Promise;

(Использование mongoose.Promise = global.Promise; от файла мангуста)

После обновления до TypeScript 2.x он показывает эту ошибку в терминале и не позволит запустить сервер.

Левая часть выражения присваивания не может быть константой или свойство только для чтения.

Как я могу это решить? Благодаря

4b9b3361

Ответ 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()