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
相关产品推荐
相关产品推荐

