如何在TypeScript中为函数包装器添加类型

我试图在 typescript 中编写一个小的缓存包装器(简化的伪演示代码):

我试图在 typescript 中编写一个小的缓存包装器(简化的伪演示代码):

const cache = {};
export function cachify<T, V>(name:string, getFunction: (i:V)=>Promise<T>): (i:V) => Promise<T> {
  return function() {
    return cache[name] || getFunction.apply(this,arguments)
  }
})

如果我的函数只有一个参数,例如

function isNameFancy(name:string) {
  return Promise.resolve(true)
}
const isNameFancyWithCache = cachify(isNameFancy)

然而,当我指定i:V这只对一个参数有效。

如果我有第二个函数,例如isPersonFancy它不会工作:

function isPersonFancy(personAge: number, personName: string) {
  return Promise.resolve(true)
}
const isPersonFancyWithCache = cachify(isPersonFancy)

如何更改我的 cachify 函数类型,以便它适用于这两种情况?

1

您可以为cachify函数声明其他签名:

const cache = {};
export function cachify<T, V>(name: string, getFunction: (i: V) => Promise<T>): (i: V) => Promise<T>;
export function cachify<T, V1, V2>(name: string, getFunction: (i: V1, j: V2) => Promise<T>): (i: V1, j: V2) => Promise<T>;
export function cachify(name: string, getFunction: (...args: any[]) => Promise<any>): (...args: any[]) => Promise<any> {
    return function () {
        return cache[name] || getFunction.apply(this,arguments)
    }
};
function isNameFancy(name: string) {
    return Promise.resolve(true)
}
const isNameFancyWithCache = cachify("isNameFancy", isNameFancy); // (i: string) => Promise<boolean>
function isPersonFancy(personAge: number, personName: string) {
    return Promise.resolve(true)
}
const isPersonFancyWithCache = cachify("isPersonFancy", isPersonFancy); // (i: number, j: string) => Promise<boolean>
(code in playground)

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(30)
遥测 /SCADA系统设计和编程的最佳框架或系统架构
上一篇
通过贝宝检索用户的信用卡详细信息(paypal credit card numbers)
下一篇

相关推荐

  • 如何创建 /配置NodeTS(TypeScriptNodeJS)项目

    我正在尝试创建和运行一个简单的 TypeScript NodeJS 项目。…

    2022-11-20 00:33:46
    0 87 89
  • wincc冗余服务器配置实现高可用性的技术解决方案

    WinCC冗余服务器配置是指在WinCC系统中,将两台服务器作为一个完整的系统,当一台服务器出现故障时,另一台服务器能够接管其工作,从而保证系统的正常运行。…

    2024-09-23 14:45:12
    0 36 66
  • cvt和自动挡哪个好提升驾驶体验的最佳选择

    CVT(可变转换器)是一种由传动带及传动轮组成的无级变速器,它可以在没有传动档位的情况下,根据驾驶者的驾驶习惯,自动调整传动轮之间的转速比,从而实现无级变速。自动挡是指车辆自动变速箱,它使用液力传动来实现变速,可以自动适应车辆的行驶状态,减少司机的疲劳,提高行车的舒适性。…

    2023-06-08 07:42:19
    0 99 15
  • cv一叶扁舟和清影轩阳:漫游在一叶扁舟和清影轩阳之间

    cv一叶扁舟是一款开源的计算机视觉库,用于图像处理、计算机视觉等。它提供了丰富的API,可以帮助开发者快速实现各种图像处理任务,如图像分割、目标检测、图像识别等。清影轩阳是一款开源的计算机视觉框架,用于图像处理、目标检测、分类等。它提供了丰富的API,可以帮助开发者快速实现各种图像处理任务,如图像分割、目标检测、图像识别等。…

    2023-08-05 07:06:20
    0 39 19
  • visual studio code下载 A Powerful Tool for Software Development

    Visual Studio Code是一款免费的开源代码编辑器,由微软开发,用于编写和调试 Web 应用程序。它支持多种编程语言,如C,C++,Python,JavaScript,TypeScript,PHP,HTML,CSS等。…

    2024-09-23 05:37:27
    0 76 10
  • java protected关键字:使用protected关键字保护类成员的优点

    示例示例关键字是java中的修饰符,它可以修饰类、变量和方法。修饰类:修饰的类只能在同一个包内被访问,如果子类继承了修饰的父类,则子类可以在不同包内访问父类的成员。…

    2024-08-12 07:48:01
    0 26 32
  • css设置滚动条宽度设置:This is a title

    CSS设置滚动条宽度的方法:使用CSS3的。-webkit-属性:…

    2023-06-06 10:53:01
    0 86 35
  • xl和xe汽车cvt:探索XL和XE汽车的CVT技术优势

    XL和XE汽车CVT是一种变速器,它使用液力变矩器代替传统的机械变速器,以达到更高的效率。它的工作原理是,当发动机输出功率时,液力变矩器就会将这些功率转换为液压能量,然后将能量传递到变速器的输出轴上,从而实现变速。…

    2023-04-09 00:41:04
    0 91 68

发表评论

登录 后才能评论

评论列表(10条)