如何正确处理打字稿中的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
唯一简单的方法去?
我正在通过声明合并setAsync
和getAsync
方法来解决这个问题。 我在自己的自定义.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