![](/img/trans.png)
[英]How do I add typings for an existing Angular1 $filter function in 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.