我正在try 找出一种类型安全的方法来将函数及其参数(无论参数的数量是多少)传递给TypeScrip中的另一个包装函数.我想实现的目标是:

const myFunc1 = () => {...};
wrapper(myFunc1);

const myFunc2 = (a: string) => {...};
wrapper(myFunc2, 'hello');

const myFunc3 = (a: string, b: number) => {...};
wrapper(myFunc3, 'hello', 10);

以下是我的try :

function wrapper<A extends (...params: B[]) => any, B extends any>(x: A, ...y: B[]) {}

推荐答案

y上使用Parameters实用程序:

function wrapper<A extends (...params: any[]) => any>(x: A, ...y: Parameters<A>) {

您还可以使用ReturnType实用程序将返回类型注释为A:

function wrapper<A extends (...params: any[]) => any>(x: A, ...y: Parameters<A>): ReturnType<A> {
    return x.call(undefined, ...y);
}

Playground

Typescript相关问答推荐

net::BER_RECTION_REUSED和Uncatch使用Axios和TanStack-Query useMutation时未捕获错误(DelivercMutation)

带有微前端的动态React路由问题

类型安全JSON解析

使用Angular和API请求在CRUD操作后更新客户端数据的良好实践

在这种情况下,如何获得类型安全函数的返回值?

如何在单击停止录制按钮后停用摄像机?(使用React.js和Reaction-Media-Recorder)

Express Yup显示所有字段的所有错误

了解类型规则中的关键字

(TypeScript)TypeError:无法读取未定义的属性(正在读取映射)"

如何将对象数组中的键映射到另一种对象类型的键?

在类型脚本中将泛型字符串数组转换为字符串字母并集

Typescript -返回接口中函数的类型

VITEST警告:当前的测试运行器不支持After Each/teardown挂钩

扩展对象的此内容(&Q;)

顶点堆叠的图表条形图未在正确的x轴上显示

为什么看起来相似的代码在打字时会产生不同的错误?

什么';是并类型A|B的点,其中B是A的子类?

为什么类方法参数可以比接口参数窄

两个子组件共享控制权

在Typescript 中,是否有一种方法来定义一个类型,其中该类型是字符串子集的所有可能组合?