首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获得并返回正确的打字本类型

获得并返回正确的打字本类型
EN

Stack Overflow用户
提问于 2020-10-28 09:44:17
回答 1查看 1K关注 0票数 2

redis节点库中的redis方法get具有以下类型记录签名:

代码语言:javascript
复制
export interface Commands<R> {
    get(key: string, cb?: Callback<string | null>): R;
}

如果我promisify该方法,则签名丢失,返回类型变为any

我试图用这样的方式设置正确的签名:

代码语言:javascript
复制
const client = redis.createClient(redisOption);
const getAsync = promisify<redis.Commands<boolean>['get']>(client.get).bind(client);

但是ts lint显示了一些错误:

获取键的值。

没有过载和这个电话匹配。重载14中的1,'(fn: CustomPromisify<(key: string,cb?:Callback) => boolean>):(key: string,cb?:Callback) => boolean',给出了以下错误。类型'(key: string,cb?:Callback) => boolean‘的参数不能分配给'CustomPromisify<(key: string,cb?:Callback) =>布尔>’的参数。属性'promisify‘在类型’(键: string,cb?:回调) => boolean‘中缺失,但在类型'CustomPromisifyLegacy<(key: string,cb?:Callback) => boolean>中需要。重载14中的2,‘(回调:(错误:任何,结果:(key:=>,cb?:回调) => => )):() => Promise<(键: string,cb:回调) => boolean>',给出了以下错误。=>布尔值“不能分配给类型的参数”(回调:(错误:任何,结果:(key: string,cb:回调) =>布尔值) => void) => void‘。

如何设置正确的签名?

EN

回答 1

Stack Overflow用户

发布于 2021-08-11 07:31:49

我只是遇到了一个类似的问题。

不确定它是否是最佳解决方案,但我所做的是扩展RedisClient接口,然后重写get方法类型。

代码语言:javascript
复制
import util from "util";
import redis  from "redis";

interface PromiseRedis extends Omit<redis.RedisClient, "get"> {
  get(key: string): Promise<string | boolean> | boolean;
}

const url = "redis://127.0.0.1:6379";
const redisClient:PromiseRedis = redis.createClient(url);
redisClient.get = util.promisify(redisClient.get)

现在get函数返回一个承诺。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64570192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档