我试图在 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)
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(10条)