2016-01-21 4 views
8

Typoskript mit ...Können Sie diese seltsame ES6-Pfeilfunktion über Typoskript erklären?

public subscribe:(subscribeFunction:(state)=>void)=>()=>void; 

Bin ich dieses Recht zu verstehen? Es ist eine subscribe-Methode, die Funktion als ein Argument des Typs Funktion erhält, und diese Funktion gegeben, wird ein Zustandsargument erhalten, wenn sie aufgerufen wird, dass argumented Funktion nichts zurückgibt (zB: void) ... und ich bin auf dem verloren last() =>() => void

: /?

Sean

+1

übrigens noch deutlicher sein, niemand sollte jemals verwirrend Code schreiben so was. Wenn es schwer zu lesen ist, brechen Sie es auf! 'type VoidFunction = {(): void; }; subscribe: {(subscribeFunction: (state) => void): VoidFunction; } 'zum Beispiel. –

Antwort

8

Es ist für eine öffentliche Eigenschaft subscribe genannt, die eine Art von (subscribeFunction: (state) => void) =>() => void; hat:

// scope 
public 
// name 
subscribe: 
// type (function) 
    // parameters 
    (
     // parameter name 
     subscribeFunction: 
     // parameter type (function) 
     (state) => void 
    ) => 
    // return type (function) 
    () => void; 

Hier ist ein Beispiel, das kompiliert:

class MyClass { 
    public subscribe: (subscribeFunction: (state) => void) =>() => void; 
} 

let myInstance = new MyClass(); 

myInstance.subscribe = (subscribeFunction: (state) => void) => { 
    console.log("statements might go here"); 

    return() => { 
     subscribeFunction(1 /* state */); 
     console.log("nothing returned by this inner function"); 
    }; 
}; 

// Example use 

// outputs "statements might go here" 
let innerFunction = myInstance.subscribe((state) => console.log(state)); 
// outputs 1 and "nothing returned by this inner function" 
innerFunction(); 
+0

Ich dachte immer du machst a: void für die Funktion, die nichts zurückgibt, ich denke, mehrere Möglichkeiten ... tx !!! – born2net

+2

@ born2net ja, das ist was es bedeutet. Da die Methode einen Rückgabetyp von '() => void 'hat, gibt sie eine Funktion zurück, die nichts zurückgibt. –

+0

@ born2net wow, ich habe die ursprüngliche Erklärung wirklich vermasselt. Ich vermisste das ':' ... Es ist jetzt behoben. Das tut mir leid. –

0

Mitteilung über den ersten Doppelpunkt - subscribe ist eine öffentliche Eigenschaft eines Funktionstyps, keine Methode. Entfaltete:

public subscribe: // public property, which is 
    (// of the type of a function, which takes 
     subscribeFunction: // 1 parameter, which itself is 
     (state) => void // a function of 1 parameter, returning nothing 
    ) => // and the upon invocation of a function stored in "subscribe" it 
     () => void; // returns a function of no parameter and no return value 

So eine Funktion in die subscribe Eigenschaft speichern kann, dann rufen Sie während es eine Funktion als Parameter übergeben wird, und als Ergebnis erhalten Sie eine weitere Funktion erhalten, die Sie anschließend anrufen:

subscribe = (subscribeFunction: (state) => void) => { 
    subscribeFunction('A'); 
    return() => {console.log('C');}; 
}; 
let subscribed = subscribe((state) => { 
    console.log(state, 'B'); 
}); // prints 'A,B' 
subscribed(); // prints 'C' 
0

tx für Feedback, jetzt, wo ich es verstehe ich denke, daß seine besten erklärt wie:

öffentlich abonnieren: (subscribeFunction: (state) => void)

// Der erste Trank ist für subscribeFunction, der eine Funktion akzeptiert, die nichts zurückgibt

=>() => void;

// zweite Trank ist für die selbst abonnieren, da es eine Funktion zurück, die nichts zurückliefert ... und ich stimme zu, Code wie diesen sollte

Verwandte Themen