2017-08-03 83 views
1

我讀的打字稿手冊,並根據功能類型頭球Functions section有這個例子(我的理解):打字稿功能類型的語法解釋

let myAdd = function(x: number, y: number): number { return x+y; }; 

其次是

讓我們通過查看函數類型的每個 部分來寫出函數的完整類型。

這句法:

let myAdd: (x: number, y: number) => number = 
    function(x: number, y: number): number { return x+y; }; 

有人能打破這和解釋它,因爲我從來沒有見過這並不能找到在手冊的解釋?

+1

手冊中的說明位於緊跟在引用位後面的段落中。 – Duncan

+1

它在您鏈接的部分中進行了解釋? 「一個函數的類型有兩個相同的部分:參數類型和返回類型,當寫出整個函數類型時,兩個部分都是必需的。」 「第二部分是返回類型,我們通過在參數和返回類型之間使用胖箭頭(=>)來明確哪個返回類型。」 – AndyJ

+0

@AndyJ是的,我正在使用箭頭函數在我頭上的箭頭,也沒有看到這種方式使用脂肪箭頭。只需要它清理。 –

回答

3

這條線:

let myAdd: (x: number, y: number) => number = 
    function(x: number, y: number): number { return x+y; }; 

由3個部分組成:

(1)變量聲明,這部分是let myAdd。我認爲這裏沒有什麼要補充的,就像js一樣。

(2)變量的類型:(x: number, y: number) => number
這裏我們定義了一個函數類型,它需要兩個參數,兩個參數都是number,名稱爲xy
該功能需要返回number

(3)將值賦予變量:= function(x: number, y: number): number { return x+y; }
這和javascript一樣,除了爲params和返回值添加的類型。
如果你看看它,你會發現實際的實現完全符合聲明的類型。

你也可以寫這樣的:

let myAdd: (x: number, y: number) => number = function(x, y) { return x+y; }; 

或者:

let myAdd: (x: number, y: number) => number = (x, y) => { return x+y; }; 
+0

謝謝。讓我感到困惑的主要事情(即使在手冊中進一步解釋)是使用'=>'只看到它與箭頭函數語法一起使用。它在兩種情況下的使用都具有相同的含義嗎? –

+0

在打字稿中,當你正在編寫一個函數類型時,你使用這種符號表示結果類型。例如:'type MyFunction =(num:number,str:string)=> void'。不要與箭頭功能混淆。 –

+0

@camden_kid非常相似,但不一樣。 [箭頭函數不會綁定'this'](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions#No_binding_of_this)。 – k0pernikus

1

第一行:

let myAdd: (x: number, y: number) => number 

是聲明變量 「myAdd」 的類型。在第一個例子中,Typescript可以自動推斷出這一點,或者(第二個例子顯示),你可以隱式地告訴Typescript它應該期待什麼。

第二行:

function(x: number, y: number): number { return x+y; }; 

指已分配給變量「myAdd」函數本身的類型。

爲了說明同樣的事情,一個簡單的例子:

let myString: (input: string) => string = (input: string) => input; 

另外的隱式聲明的變量,不同的例子類型:

let myNumber: number = 10; 

兩個以上的告訴打字稿的變量應該是什麼。