gpt4 book ai didi

typescript - 定义动态回调类型的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-02 18:16:20 25 4
gpt4 key购买 nike

我(在 TypeScript 中)有一个名为“Instructions”的类,它有一个名为“operate”的静态方法。此方法接受两个特定参数以及另外两个可能的参数。第一个参数是“操作”方法应调用的“回调函数”,其余参数与将传递给我作为第一个参数获得的回调函数的参数相同。我的问题是,如何定义回调函数的类型。

一开始,我想这样实现:

interface Operand {
// ...
}

interface OperationFunc {
(dstOperand: Operand, srcOperand?: Operand, powerEvaluation?: number): void;
}

class Instructions {
static operate (callback: OperationFunc, dstOperand, srcOperand?, powerEvaluation?) {
callback(dstOperand, srcOperand, powerEvaluation);
}
}

由于多种原因,最终没有成功。主要原因是每次调用的回调函数不是同一个函数。但是 - 这些是不同的函数,每次我根据需要传递不同的回调函数。有时它是一个接收单个“操作数”类型参数的函数,有时它是一个接收两个“操作数”类型参数的函数,有时它是一个接收三个参数的函数 - 其中两个是“操作数”类型,以及“数字”类型的第三个。这三种类型的函数返回void。

interface Operand {
// ...
}
type Function1 = (dst: Operand) => void; // The first type of callback functions
type Function2 = (dst: Operand, src: Operand) => void; // The second type of callback functions
type Function3 = (dst: Operand, src: Operand, powerEvaluation: number) => void; // The third type of callback functions

有人知道如何定义这样的回调函数的类型吗?

最佳答案

genericsutility types ,您可以定义一个类型,该类型通常应用于您作为参数提供的类型。例如,您可以定义一个函数,该函数将另一个函数以及该函数的参数作为参数。

function wrapper<
T extends (...params: any[]) => any
>(func: T, ...params: Parameters<T>): ReturnType<T> {
return func(...params);
}

function theFunc(x: string, y: number, z: string) {
return x + " " + y + " " + z;
}

console.log(wrapper(theFunc, "i would like", 1, "tall glass of milk"));

请在 playground 上查看.

关于typescript - 定义动态回调类型的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71547218/

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