2015-12-14 190 views
46

我剛開始學習TypeScript。我看到有很多代碼使用這個sytax =>。我通過閱讀Specification of TypeScript Version 1.6和一些谷歌做了一些研究。我仍然無法理解=>的含義。
對我來說,感覺就像在C++中使用指針。但我無法證實。如果任何人都可以解釋下面的例子,那會很棒。謝謝!TypeScript中「=>」的含義是什麼? (Fat Arrow)

下面是我在閱讀Typescript規範時找到的示例。 :

對象類型

var MakePoint:() => { 
    x: number; y: number; 
}; 

問:這是什麼代碼在做什麼?創建一個名爲的對象MakePoint用x和y提起number type?這是一個構造函數或功能MakePoint

功能類型

function vote(candidate: string, callback: (result: string) => any) { 
// ... 
} 

問:這是什麼的=> any意思?你是否必須返回字符串類型的結果?

任何人都可以用適當的例子來解釋這些差異或目的。謝謝!

+1

這也可能有所幫助:http://www.codebelt.com/typescript/arrow-function-typescript-tutorial/ – zedfoxus

回答

49

也許你正在將類型信息與函數聲明混淆。如果您compile the following

var MakePoint:() => {x: number; y: number;}; 

你會看到,它產生:

var MakePoint; 

在打字稿,在:之後,但一個=(分配)之前出現一切類型的信息。所以你的例子是說MakePoint的類型是一個函數,它接受0個參數,並返回一個帶有兩個屬性的對象,xy,這兩個數字。它沒有爲該變量分配一個函數。相比之下,編譯:

var MakePoint =() => 1; 

生產:

var MakePoint = function() { return 1; }; 

注意,在這種情況下,=>脂肪箭頭來賦值運算符之後。

從OP鏈路
+1

如果MakePoint是一個函數,爲什麼不直接使用常規的JavaScript函數聲明?例如'function MakePoint ){...}'? –

+7

@ShaohaoLin它更短並且省略了名稱('()=> ...'),它保留了'this'的範圍,這意味着您不再需要創建'var self = this'變量,或通過函數參數傳遞'this'。[更多信息](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions) –

+0

如何訪問在你的'var MakePoint =()=> 1'的例子中,屬性'x'和'y'' x'和'y'都被指定爲'1'? –

21

在類型位置中,=>定義了一個函數類型,其中參數位於=>的左側,返回類型位於右側。所以callback: (result: string) => any的意思是「callback是一個參數,它的類型是一個函數,該函數帶有一個參數result,其類型爲string,函數的返回值類型爲any」。

對於表達水平構建體,見What's the meaning of "=>" (an arrow formed from equals & greater than) in JavaScript?

+0

所以在這種情況下,回調只是函數的名稱? –

+1

@ShaohaoLin它是一個參數的名稱,並且該參數的類型將是一個函數(但是您作爲參數傳入的任何函數的名稱可以是任何東西) –

+0

這實際上是唯一的答案,說明存在差異打字稿中的胖箭頭和emca腳本 –

5

它被稱爲「胖箭頭」。它是在EcmaScript6中添加的,並替代了其他功能關鍵字。

更多可讀取here

10
var MakePoint:() => { 
    x: number; y: number; 
}; 

MakePoint是一個變量。它的類型是一個不帶參數併產生數字x和y的函數。現在箭頭是否有意義?

2

直接:

在這個例子中,以「投票」的第二參數具有功能類型

(結果:字符串)=>這意味着第二個參數的任何 是一個返回類型爲'any'的函數,它具有名爲'result'的'string'類型的單個參數。

相關問題