[英]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.