Обещание мангуста с синей птицей и машинописью

node.js mongodb typescript mongoose

4374 просмотра

4 ответа

10189 Репутация автора

Я занимаюсь разработкой приложения с помощью nodejs / typescript и базы данных mongodb. Для запроса базы данных я использую мангуст .

Я только что прочитал статью из документации mongoose о том, как подключить внешнюю библиотеку обещаний, и это очень просто:

import mongoose = require("mongoose");
import Promise = require("bluebird");
mongoose.Promise = Promise;

Делать это работает нормально. Но я хотел бы расширить / переопределить тип обещания, которое возвращается.

Вот пример функции:

public getModel= () => {
    return MyModel.findOne().exec();
}

Эта функция возвращает a, _mongoose.Promise<MyModel>и я хотел бы вернуть bluebird, Promise<MyModel>потому что я знаю, что это обещание bluebird.

Есть ли в любом случае, чтобы изменить / расширить / переопределить возвращаемый тип запроса мангуста? Должен ли я написать собственный файл определения для моего приложения? Любые другие предложения будут оценены.

Спасибо !

Автор: Thomas Источник Размещён: 19.07.2016 04:35

Ответы (4)


1 плюс

157152 Репутация автора

Должен ли я написать собственный файл определения для моего приложения

Да. Это будет главным образом найти и заменить Обещание в определении мангусты.

Автор: basarat Размещён: 19.07.2016 04:46

1 плюс

10189 Репутация автора

Решение

Команда mongoose обновила файл определения, и теперь вы можете подключить и использовать свою собственную библиотеку обещаний, назначив MongoosePromise<T>.

Создайте основной .d.tsфайл для своего приложения и добавьте следующее:

declare module "mongoose" {
    import Bluebird = require("bluebird");
    type MongoosePromise<T> = Bluebird<T>;
}

Ссылка на этот файл в вашем проекте, и теперь Mongoose возвращает Bluebird Promise!

Это также работает для других библиотек обещаний.

РЕДАКТИРОВАТЬ последнюю версию набора

declare module "mongoose" {
    import Bluebird = require("bluebird");
    type Promise<T> = Bluebird<T>;
}

Смотрите документацию здесь

Автор: Thomas Размещён: 29.08.2016 10:17

5 плюса

69 Репутация автора

PromiseЭкспорт в качестве переменной в mongoose, так что вы можете mongooseсначала преобразовать пространство имен как любое, а затем установить Promiseдля других.

  1. если вы используете qlib.
    • установить npm install --save q @types/qпервым. tscверсия> = 2.0.
    • затем добавьте (<any>mongoose).Promise = Q.Promise;
  2. используя bluebirdlib, добавьте код ниже.
    • import Bluebird = require("bluebird");
    • (<any>mongoose).Promise = Bluebird;
Автор: ServerYang Размещён: 25.11.2016 02:32

0 плюса

7024 Репутация автора

На момент написания этой статьи существует открытая проблема в файле наборов, который устанавливается, если вы используете typings install mongooseдля установки наборов. В частности, загружаемый файл типизаций импортирует mpromise , а оператор import приводит к включению полного файла определения модуля mpromise по типам и включается в ваш typings\modules\mongoose\index.d.tsфайл.

Пока эта проблема не будет решена, мой обходной путь - удалить определение модуля ~mongoose~mpromiseи заменить следующую строку в index.d.tsфайле:

import * as Promise from '~mongoose~mpromise';

с этим:

import Promise = require( "bluebird");

По общему признанию, это временная остановка, поскольку другой вызов typings install mongooseотменит это исправление. Для любопытных, моя текущая настройка включает в себя: набрав (версия 2.0.0), npm (3.10.9) и узел (v6.9.2)

Автор: Jthorpe Размещён: 27.12.2016 11:16
Вопросы из категории :
32x32