You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript中如何为多重载函数定义参数透传的代理函数

解决方法

方案1:利用TypeScript工具类型匹配原函数参数类型

保持原函数any的重载定义不变,修改代理函数one的实现参数类型,使用Parameters<typeof any>获取any所有重载的参数元组联合类型,TypeScript就能自动识别params与any的参数匹配逻辑,无需手动处理每个参数变体:

async function any(table: string, columns?: string[], conditions?: object): Promise<object[]>
async function any(table: string, conditions?: object): Promise<object[]>
async function any(queryFunction: object): Promise<object[]>

async function any(...params: any[]): Promise<object[]> {
    return Promise.resolve([])
}

async function one(table: string, columns?: string[], conditions?: object): Promise<object>
async function one(table: string, conditions?: object): Promise<object>
async function one(queryFunction: object): Promise<object>

// 使用Parameters<typeof any>匹配原函数的所有参数类型
async function one(...params: Parameters<typeof any>): Promise<object> {
    return (await any(...params))[0]
}

Parameters<typeof any>会自动生成any函数所有重载的参数元组联合类型([string, string[]?, object?] | [string, object?] | [object]),既保证了类型安全,又无需手动维护参数变体。

方案2:类型断言快速解决(类型安全性稍弱)

如果不想修改参数类型定义,也可以通过类型断言告诉TypeScript忽略参数类型检查,直接透传参数:

async function one(...params: any[]): Promise<object> {
    // 将params断言为any绕过类型检查
    return (await any(...params as any))[0]
}

这种方式代码改动最小,但会失去部分类型校验,适合快速解决问题的场景。

内容的提问来源于stack exchange,提问作者Christoph Herrmann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 06:42:26