1

尝试编译时:

function foo(f: (number, number)=>boolean) {}

我得到错误:

Duplicate identifier 'number'.

为什么?我要说明的f是一个函数,它接受两个参数,每个参数都是 type number,并返回一个boolean. 我该怎么说?

作为参考,以下编译:

function foo2(f: (number) => boolean) { }

function foo3(f: (a: number, b: number) => boolean) { }

function foo4(f: (number, string) => boolean) { }

但以下不会(它会产生完全相同的错误,Duplicate identifier 'number'):

function foo5(f: (number, number[]) => boolean) { }
4

1 回答 1

3

您必须命名函数f接受的参数。这就是为什么foo3有效。 foo2foo4编译,因为编译器将它们作为名称,并且因为没有类型假定any类型。它们可以重写为:

function foo2(f: (number: any) => boolean) { }
function foo4(f: (number: any, string: any) => boolean) { }

当然,这是一些令人困惑的代码。

考虑到这一点foo是行不通的,因为编译器认为这意味着:

function foo(f: (number: any, number: any)=>boolean) {}

是的,你有一个重复的标识符number

于 2013-07-04T18:01:04.747 回答