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

TypeScript无法正确推断bindReturn函数的类型参数B问题求助

TypeScript无法正确推断bindReturn函数的类型参数B问题求助

大家好,我正在尝试实现一个类似Function.prototype.bind()的自定义函数,但调用逻辑略有不同,我的函数定义如下:

/**
 * @template T
 * @template {any[]} A
 * @template {any[]} B
 * @template R
 * @param {(this: T, ...params: [...A, ...B]) => R} func
 * @param {() => [T, ...A]} getParams
 */
export function bindReturn(func, getParams) {
  /** @param {B} params */
  return (...params) => func.call(...getParams(), ...params)
}

不过当我按下面的方式调用这个函数时,TypeScript没办法正确推断出类型参数B的类型:

/**
 * @param {string} a
 * @param {number} b
 * @param {boolean} c
 */
function f(a, b, c) {
  return /** @type {const} */ ([a, b, c])
}

const f2 = bindReturn(f, () => /** @type {const} */ ([null]))

这里bindReturn的类型参数B被推断成了any[],但我期望它应该是[a: string, b: number, c: boolean]。我之所以用[...A, ...B]的写法,是因为这个结构也被用在Function.prototype.bind()的类型定义里,原本以为能让TS正确拆分参数列表,但实际效果并不符合预期。有没有朋友能帮我分析下问题出在哪,该怎么调整才能让TypeScript正确推断出B的类型呢?

备注:内容来源于stack exchange,提问作者Abdulramon jemil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 06:53:00