我在MongoDB node.js驱动程序中使用TypeScript。请注意,这不是一个Mongo问题,它只是我遇到的这个问题的特殊用例。
几乎每个Mongo调用都使用一个(arg1, arg2, ..., argn, callback)
其中callback
接受函数的模式(err, res)
。但是,我想使用承诺。我试图通过编写一个辅助包装函数来简化用法,如下所示:
function mongoWrap(action: (callback: (err: Error, res: T) => void) => void) : q.IPromise { var promise = q.Promise ((resolve, reject) => { action((err, res) => { if (err) reject(err); else resolve(res); }); }); return promise; }
这很好用,除了出于某种原因编译器无法推断的类型T
。我必须打如下电话:
var dbPromise = mongoWrap(cb => mongoClient.connect("mongodb://localhost:27017/database", cb));
如果我省略该
零件,结果将是Promise<{}>
并且我失去类型安全性。但是,编译器显然知道callback
Mongo调用的参数是(err: Error, db: Db) => void
。
我该怎么做才能使编译器正确推断出类型T
?