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
上一篇: 使用反应有什么好处