TypeScript如何让deploy函数根据传入函数自动推导后续参数类型
需求实现方案
该需求完全可以通过 TypeScript 泛型 + 内置工具类型实现,具体实现方式如下:
实现思路
- 定义泛型参数
T约束为任意函数类型,用于承接传入的第一个参数 - 通过 TypeScript 内置工具类型
Parameters<T>提取函数T的入参类型元组,作为后续剩余参数的类型约束 - 若需要返回传入函数的执行结果,可搭配
ReturnType<T>定义返回值类型
调整后完整代码
const alpha = (a: string, b:string) => {}; const beta = (a: number, b:number) => {}; // 泛型T约束为任意函数类型 export const deploy = async <T extends (...args: any[]) => any>( toDeployContract: T, // 剩余参数自动匹配传入函数的入参类型 ...args: Parameters<T> ): Promise<void> => { // 此处可补充你的业务逻辑,示例为直接执行传入的函数 toDeployContract(...args); }
调用验证
调整后两种调用方式均可正常通过类型校验:
- 传入
alpha时:deploy(alpha, "hello", "world");后续参数会自动校验为 string 类型 - 传入
beta时:deploy(beta, 1, 2);后续参数会自动校验为 number 类型
如果参数类型不匹配,TypeScript 会在编码阶段直接抛出类型错误提示。
内容的提问来源于stack exchange,提问作者sshmaxime
相关产品推荐
相关产品推荐

