2015-12-14 4 views
46

Ich fange gerade an, TypeScript zu lernen. Und ich sah, dass es eine Menge Code unter Verwendung dieses Sytax => gibt. Ich habe etwas recherchiert, indem ich die Specification of TypeScript Version 1.6 und einige google gelesen habe. Ich kann die Bedeutung von => immer noch nicht verstehen.
Für mich fühlt es sich an wie ein Zeiger in C++. Aber ich kann es nicht bestätigen. Wenn jemand die folgenden Beispiele erklären kann, wird das großartig. Vielen Dank!Was bedeutet "=>" in TypeScript? (Fettpfeil)

Hier sind die Beispiele, die ich fand, als ich die Spezifikation von Typescript las. :

Objekttypen

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

Frage: Was dieser Code tut? Erstellen eines Objekts namens MakePoint mit x und y in Nummer Typ? Ist das ein Konstruktor oder eine Funktion für MakePoint?

Funktionstypen

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

Frage: Was ist die Bedeutung von => any tut? Müssen Sie den String-Typ des Ergebnisses zurückgeben?

Kann jemand mir den Unterschied oder den Zweck von diesen mit richtigem Beispiel erklären. Vielen Dank!

+1

Das könnte auch helfen: http://www.codebelt.com/typescript/arrow-function-typescript-tutorial/ – zedfoxus

Antwort

49

Vielleicht verwirren Sie Typinformationen mit einer Funktionsdeklaration. Wenn Sie compile the following:

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

Sie werden sehen, dass es produziert:

var MakePoint; 

In Typoskript, alles, was nach dem : kommt aber vor einem = (Zuordnung) ist die Typinformation. Ihr Beispiel sagt also, dass der Typ von MakePoint eine Funktion ist, die 0 Argumente akzeptiert und ein Objekt mit zwei Eigenschaften, x und y, beide Zahlen zurückgibt.Es weist dieser Variablen keine Funktion zu. Im Gegensatz dazu Kompilieren:

var MakePoint =() => 1; 

produziert:

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

Beachten Sie, dass in diesem Fall der => Fett Pfeil kommt nach dem Zuweisungsoperator.

+1

Wenn MakePoint eine Funktion ist, warum nicht einfach reguläre JavaScript-Funktionsdeklaration verwenden? Zum Beispiel 'function MakePoint () {...} '? –

+7

@ShaohaoLin Es ist kürzer und lässt den Namen ('() => ... ') weg, und es behält den Geltungsbereich von' this' bei, was bedeutet, dass Sie 'var self nicht mehr erstellen müssen = this 'Variablen, oder übergeben' this 'durch Funktionsargumente. [Weitere Informationen hier] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions) –

+0

Wie kann ich auf die property 'x' und' y' in Ihrem Beispiel für 'var MakePoint =() => 1'?' x' und 'y' sind beide mit' 1' verbunden? –

21

In einer Typenposition definiert => einen Funktionstyp, bei dem die Argumente links von => stehen und der Rückgabetyp auf der rechten Seite steht. So callback: (result: string) => any bedeutet "callback ist ein Parameter, dessen Typ eine Funktion ist. Diese Funktion dauert einen Parameter namens result des Typs string, und der Rückgabewert der Funktion ist vom Typ any".

Für die Expression-Ebene Konstrukt finden What's the meaning of "=>" (an arrow formed from equals & greater than) in JavaScript?

+0

Also in diesem Fall ist Callback nur der Name der Funktion? –

+1

@ShaohaoLin es ist der Name eines Parameters, und der Typ dieses Parameters wird eine Funktion (aber der Name der Funktion, die Sie als Argument übergeben kann alles sein) –

+0

Dies ist eigentlich die einzige Antwort erklären, es gibt einen Unterschied zwischen dem dicken Pfeil in Typoskript und in Emca-Skript –

5

Es ist ein „Fett Pfeil“ genannt. Es wurde in EcmaScript6 hinzugefügt und ersetzt unter anderem das Funktionsschlüsselwort.

Mehr kann gelesen werden here.

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

MakePoint ist eine Variable. Sein Typ ist eine Funktion, die keine Argumente annimmt und die Zahlen x und y erzeugt. Macht der Pfeil jetzt Sinn?

2

direkt über den Link in OP:

In diesem Beispiel hat der zweite Parameter auf 'Stimme' den Typ Funktion

(Ergebnis: string) => jeder , die den zweiten Parameter bedeutet, ist eine Funktion, die den Typ 'any' zurückgibt, der einen einzelnen Parameter vom Typ 'string' mit dem Namen 'result' hat.