繁体   English   中英

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

[英]How to add typings for a function wrapper in 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>

操场上的代码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM