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

展开Parameters<F>时触发TypeScript错误,其原因是什么?

为什么会出现这个TypeScript错误?

这个错误的核心原因是你对泛型函数F的约束太宽泛,导致TypeScript无法确定Parameters<F>是可展开的元组类型。

你写的约束是F extends (...args: any) => any,这里的any表示单个参数的类型为any,而非“接受任意参数列表”。TypeScript看到这个约束时,会认为F可能是一个只接受单个非数组类型参数的函数,对应的Parameters<F>就可能被判定为无法被...展开的类型(虽然实际上Parameters<F>总是元组,但在泛型上下文里TypeScript没法提前确定这一点)。

解决方法很简单,把泛型约束改成F extends (...args: any[]) => any,明确F是接受任意数组形式参数列表的函数:

function wrapMe<F extends (...args: any[]) => any>(
    f: F,
): (...args: Parameters<F>) => ReturnType<F> {
    return function(...args: Parameters<F>): ReturnType<F> {
        return f(...args); // 现在不会报错了
    }
}

你也可以直接利用TypeScript的类型推断,简化返回值类型的写法,让代码更简洁:

function wrapMe<F extends (...args: any[]) => any>(f: F) {
    return function(...args: Parameters<F>): ReturnType<F> {
        return f(...args);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 16:53:20