How to properly deal with promisifyAll in typescript?

Consider the following code:

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 will error out because it's created on the fly and not defined in any .d.ts file. So what is the proper way to handle this?

Also, even though I have the .d.ts files loaded for redis, I still need to cast redis to any to be used for promisifyAll . Otherwise, it will spill out error:

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

Is typing it to any the only easy way to go?


I'm solving this by declaration merging the setAsync & getAsync methods. I added the following code in my own custom .d.ts file.

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/33246.html

上一篇: 使用反应有什么好处

下一篇: 如何正确处理打字稿中的promisifyAll?