当前定义位于未传输定义之后时的Typescript错误

当前定义位于未传输定义之后时的Typescript错误,typescript,definitelytyped,Typescript,Definitelytyped,我收到错误:应为1个参数,但当我将方法的未载波定义置于当前定义之上时,得到了2.ts(2554) 未能通过dtslint测试: function match(regExpression: RegExp, str: string): string[]; function match(regExpression: RegExp): (str: string) => string[]; function throttle<T, U>(fn: (input: T) => U

我收到错误:
应为1个参数,但当我将方法的未载波定义置于当前定义之上时,得到了2.ts(2554)

未能通过
dtslint
测试:

function match(regExpression: RegExp, str: string): string[]; 
function match(regExpression: RegExp): (str: string) => string[]; 

function throttle<T, U>(fn: (input: T) => U, ms: number): (input: T) => U;
function throttle<T, Q, U>(
  fn: (input1: T, input2: Q) => U, ms: number
): (input1: T, input2: Q) => U;

it('match', () => {
    const fn = throttle(match, 1000)
    fn(/foo/,'foo bar')  // line of error
})
函数匹配(regExpression:RegExp,str:string):string[];
函数匹配(regExpression:RegExp):(str:string)=>string[];
功能节气门(fn:(输入:T)=>U,ms:编号):(输入:T)=>U;
功能节流阀(
fn:(输入1:T,输入2:Q)=>U,ms:number
):(input1:T,input2:Q)=>U;
它('匹配',()=>{
常数fn=节气门(匹配,1000)
fn(/foo/,'foo bar')//错误行
})
如果我将当前的
match
定义移到未传输的定义上方,则错误消失

我的问题是,我真的应该在curry版本之后放置uncarried版本,还是
throttle
定义中存在错误



问题的背景是为类似于
ramda

的库编写Typescript定义,Typescript按从上到下的顺序检查重载签名(内部为交集类型)。当
throttle
选择使用哪个签名来推断泛型参数(几乎与条件类型相同)时,它总是选择最后一个签名

TS型系统的密切相关特征如下所述:

当从具有多个调用签名的类型(例如重载函数的类型)进行推断时,将从最后一个签名(这可能是最允许的“一网打尽”情况)进行推断。无法基于参数类型列表执行重载解析(这将要求我们支持任意表达式的typeof,如#6606或类似建议)


非常感谢