gpt4 book ai didi

typescript - 如何输入类似 _.once 的内容

转载 作者:搜寻专家 更新时间:2023-10-30 21:05:24 26 4
gpt4 key购买 nike

刚开始使用 TS,我将如何输入类似...

function once(fn) {
var haveResult = false;
var result = null;

return (...args) => {
if (!haveResult) {
haveResult = true;
result = fn.apply(this, args);
}

return result;
};
}

where once 可以接收带有任何参数的函数并返回任何参数。就像 lodash 的 _.once

最佳答案

您可以为函数类型使用通用参数,并返回具有相同类型的新函数。不幸的是,由于您不能为每个参数设置可变数量的类型参数,因此您需要使用类型断言来让辅助函数匹配结果类型,但调用站点将正确推断所有内容:

function once<TFunction extends (...args: any[])=> any>(fn: TFunction): TFunction {
var haveResult = false;
var result: any = null;

return (function (this: any, ...args: any[]) {
if (!haveResult) {
haveResult = true;
result = fn.apply(this, args);
}

return result;
}) as any;
}
// Usage
class Test {
doStuff (t: string){
console.log('doStuff');
return 1;
}

constructor() {
this.doStuff = once(this.doStuff);
}
}

let t = new Test();
t.doStuff('s');
t.doStuff('s');

关于typescript - 如何输入类似 _.once 的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49366929/

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