2016-08-24 31 views
2

私はMongooseとBluebirdをtypescriptで使用しています。 MongooseはBluebirdの約束を返すように設定されていますが、TypeScriptに "知らせる"方法についてはわかりません。例えばプロパティ 'catch'がタイプ 'Promise <void>'に存在しません

私は次の操作を実行しようとした場合、私は、Messageマングースモデルを持っている:それは.save()(または約束を返す任意の他のマングースの方法が)、Aを返すことを考えているので

new Message(messageContent) 
    .save() 
    .then(() => {...}) 
    .catch(next); 

活字体はProperty 'catch' does not exist on type 'Promise<void>'.ことを不平を言いますブルーバード(Bluebird)の約束の代わりに、「通常の」約束(確かに.catch()の方法を持っていない)

Mongooseメソッドの戻り値の型を変更して、TypeScriptがBluebirdの約束を返すことを知るようにするにはどうすればよいですか?

+0

MongooseとPromise [mongoose.d.ts](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/mongoose/mongoose.d.ts)の拡張のためのDefinitelyTypedファイルがあるようです。 )。これらのファイルを参照しましたか? – Igor

+0

@Igorはい、しかし、私はMongooseがデフォルトで持っているPromiseを使用したくないので、Bluebirdに置き換えました。 ( 'mongoose.Promise = require( 'bluebird')'を実行することによって) – Nepoxx

+0

[DefinitelyTyped/bluebird/bluebird.d.ts](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/)を参照するのはどうですか? bluebird/bluebird.d.ts)と 'save()'結果のキャストを使用していますか? – Igor

答えて

1

DefinitelyTypedのmongoose.d.tsので

/** 
* To assign your own promise library: 
* 
* 1. Include this somewhere in your code: 
* mongoose.Promise = YOUR_PROMISE; 
* 
* 2. Include this somewhere in your main .d.ts file: 
* type MongoosePromise<T> = YOUR_PROMISE<T>; 
*/ 

によると、メイン.d.tsファイルには、次のようになります。

/// <reference path="globals/bluebird/index.d.ts" /> 
/// <reference path="globals/mongoose/index.d.ts" /> 
type MongoosePromise<T> = bluebird.Promise<T>; 
+2

私はTypingによって生成されたもの以外の「メインの」d.tsファイルを持っていません。モデルを定義する行を追加しようとしましたが、動作しません。 – Nepoxx

1

私は拡張にこれをやってしまってきましたマングースモジュール:

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

は、ここに私の答えを参照してください:Mongoose Promise with bluebird and typescript

+0

私はそれを試してみます: 'TS2665:モジュール拡張はトップレベルスコープに新しい名前を導入できません。何が欠けていますか? – Nepoxx

+0

これらの行はどこに追加しましたか?私は新しいgloabal.d.tsファイルを作成し、それをindex.d.tsで参照しています。また最新のmongooseパッケージで動作させるにはes6をターゲットにする必要があります。私の答えはこちらhttp://stackoverflow.com/a/39090151/4167200 – Thomas

+0

私は.d.tsファイルを手動で管理しません。それの世話をする。モデルファイルにこれらの行をインラインで追加しました。 – Nepoxx

関連する問題