为什么打字稿中的这两种函数类型不同?

Why are these two function types in typescript different?

使用打字稿,我找到了为什么分配给不同局部变量的两个不同函数会导致不同的签名。我认为一个更明确。

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 的更明确的版本,但不知何故它被输入得更自由,因为接受 any.

使用 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 无关紧要。