尝试编译时:
function foo(f: (number, number)=>boolean) {}
我收到错误:
Duplicate identifier 'number'.
为什么呢?我打算陈述的是f
是一个函数,它接受两个参数,每个参数类型为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) { }
答案 0 :(得分:3)
您必须为函数f
所接受的参数命名。这就是foo3
工作的原因。 foo2
和foo4
编译,因为编译器将这些作为名称,因为没有类型假定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
。