[英]Mongoose Promise with bluebird and typescript
我正在使用nodejs / typescript和mongodb數據庫開發一個應用程序。 要查詢數據庫,我使用的是mongoose 。
我剛剛閱讀了mongoose文檔中有關如何插入外部promise庫的文章 ,它非常簡單:
import mongoose = require("mongoose");
import Promise = require("bluebird");
mongoose.Promise = Promise;
這樣做很好。 但是我想擴展/覆蓋返回的promise的類型。
這是一個函數的例子:
public getModel= () => {
return MyModel.findOne().exec();
}
這個函數返回一個_mongoose.Promise<MyModel>
,我想返回一個藍鳥Promise<MyModel>
因為我知道這是一個藍鳥的承諾。
無論如何都有改變/擴展/覆蓋mongoose查詢的返回類型? 我應該為我的應用編寫自定義定義文件嗎? 任何其他建議將不勝感激。
謝謝 !
Promise
導出為mongoose中的變量,因此您可以將mongoose
名稱空間轉換為任何名稱,然后將Promise
設置為其他名稱空間。
q
lib。
npm install --save q @types/q
首先保存npm install --save q @types/q
。 tsc
版本> = 2.0。 (<any>mongoose).Promise = Q.Promise;
bluebird
lib,在下面添加代碼。
import Bluebird = require("bluebird");
(<any>mongoose).Promise = Bluebird;
我應該為我的應用程序編寫自定義定義文件
是。 它主要是在貓鼬定義中找到並取代Promise。
mongoose團隊更新了定義文件,您現在可以通過分配MongoosePromise<T>
來插入並使用您自己的promise庫。
為您的應用程序創建一個主.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>;
}
請參閱此處的文檔
在撰寫本文時,如果您使用typings install mongoose
來安裝打字, 那么在打包文件中會出現一個未解決的問題 。 特定的打包文件,加載導入mpromise ,導入語句導致包含完整的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
調用會恢復這個修復。 對於好奇,我目前的設置包括:typings(版本2.0.0),npm(3.10.9)和節點(v6.9.2)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.