gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 05:40:21 24 4
gpt4 key购买 nike

我正在尝试用 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 函数类型,以便它适用于这两种情况?

最佳答案

您可以为 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 )

关于javascript - 如何在 TypeScript 中为函数包装器添加类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40564520/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com