Function 为什么typescript中的这两种函数类型不同?

Function 为什么typescript中的这两种函数类型不同?,function,typescript,types,typescript-2.5,Function,Typescript,Types,Typescript 2.5,使用typescript,我发现了为什么分配给不同局部变量的两个不同函数会产生不同的签名。我觉得其中一个更明确 let a: (number)=>number = function(x: number): number {return 42;}; let z = function(x:number): number { return 42; }; > .type a let a: (number: any) => number > .type z let z: (

使用typescript,我发现了为什么分配给不同局部变量的两个不同函数会产生不同的签名。我觉得其中一个更明确

let a: (number)=>number =
  function(x: number): number {return 42;};

let z = function(x:number): number { return 42; };

> .type a
let a: (number: any) => number
> .type z
let z: (x: number) => number
我原以为
a
只是编写
z
的一个更明确的版本,但不知何故,它的输入更加自由,因为它接受
任何

使用Typescript版本2.5.2

let a: (number)=>number
参数名称是必需的。这完全等同于:

let a: (number: any)=>number
换句话说,这里的第一个
number
定义了一个名为“number”的参数

你需要的是

let a: (x: number)=>number =
  function(x: number): number {return 42;};
名称,
x
,并不重要

参数名称是必需的。这完全等同于:

let a: (number: any)=>number
换句话说,这里的第一个
number
定义了一个名为“number”的参数

你需要的是

let a: (x: number)=>number =
  function(x: number): number {return 42;};

名称,
x
,并不重要。

啊,所以你要给它命名,或者假设它是一个类型为any的名称。那太愚蠢了。而且,名称对于类型检查来说并不重要?名称并不重要Wiw:它需要这样才能保持与JavaScript的兼容性。啊,所以您有名称,或者假定它是一个具有任意类型的名称。那太愚蠢了。而且,名称对于类型检查来说并不重要?名称并不重要。请注意:它需要这样才能保持与JavaScript的兼容性。