2017-09-13 47 views
0

使用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的更明確的版本,但不知何故,被輸入更寬鬆的接受any

使用2.5.2

回答

3
let a: (number)=>number 

參數名稱是必需的打字稿版本。這是完全等同於:

let a: (number: any)=>number 

換句話說,第一number這裏定義一個名爲 「數字」

你需要什麼參數,

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

名稱,x ,沒關係。

+0

啊,所以你有它的名字,或者它被認爲是任何類型的名字。這很愚蠢。並且,對於類型檢查而言,名稱並不重要? –

+1

名稱無關緊要 –

+1

FWIW:它需要保持與JavaScript的兼容性。 – Pace

相關問題