如何正确处理打字稿中的promisifyAll?

考虑下面的代码:

import redis = require('redis');  //Has ambient declaration from DT
import bluebird = require('bluebird');  //Has ambient declaration from DT

bluebird.promisifyAll((<any>redis).RedisClient.prototype);
bluebird.promisifyAll((<any>redis).Multi.prototype);

const client = redis.createClient();

client.getAsync('foo').then(function(res) {
    console.log(res);
});

getAsync会出错,因为它是即时创建的,并且未在任何.d.ts文件中定义。 那么处理这个问题的正确方法是什么?

另外,尽管我已经为redis加载了.d.ts文件,但我仍然需要将redis转换为用于promisifyAll any promisifyAll 。 否则,它会漏出错误:

Property 'RedisClient' does not exist on type 'typeof "redis"'

是否将其输入any唯一简单的方法去?


我正在通过声明合并setAsyncgetAsync方法来解决这个问题。 我在自己的自定义.d.ts文件中添加了以下代码。

declare module "redis" {

    export interface RedisClient extends NodeJS.EventEmitter {
        setAsync(key:string, value:string): Promise<void>;
        getAsync(key:string): Promise<string>;
    }

}
链接地址: http://www.djcxy.com/p/33245.html

上一篇: How to properly deal with promisifyAll in typescript?

下一篇: Can't install eventmachine on mac osx snow leopard