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

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

mongoose.Promise = global.Promise;

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

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

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

Как я могу решить это? Спасибо

1 ответ

Решение

Это потому что в es6 все переменные модуля считаются постоянными.

https://github.com/Microsoft/TypeScript/issues/6751

В 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().

Другие вопросы по тегам