2016-01-21 7 views
8

...私はこの権利を理解この奇妙なES6矢印機能については、typescriptで説明できますか? typescriptですを使用して

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

アム? これは、関数型を引数として取得し、その関数が与えられたときに状態引数を受け取るサブスクライブメソッドです。その引数付き関数は何も返しません(つまり:void)... last()=>()=> void

:/?

ショーン

+1

ところで、より明示的にする必要があり、同意し、誰もがこれまで混乱コードを書くべきではありませんこのような。読むのが難しい場合は、それを壊してください! 'type VoidFunction = {():void; };サブスクライブ:{(subscribeFunction:(state)=> void):VoidFunction; } 'などです。 –

答えて

8

パブリックプロパティはsubscribeと呼ばれることが(subscribeFunction: (state) => void) =>() => void;の型を持つことです。

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

ここでコンパイル例を示します

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

私はいつもあなたが何かすると思った:何も返さない関数のためのvoid、私は複数の方法を推測する... tx !!! – born2net

+2

@ born2netはい、それが意味するところです。メソッドの戻り値の型が '()=> void'なので、何も返さない関数を返します。 –

+0

@ born2netうわー、私は本当に元の説明を台無しにしました。私は ':'を逃しました...それは今修正されました。申し訳ありません。 –

0

お知らせ最初のコロン - subscribeメソッドではなく、関数型のパブリックプロパティです。折り畳まれていない:

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 

したがって、あなたは、パラメータとしてそれに機能を付与しながら、それを呼び出す、subscribeプロパティに関数を格納することができ、結果として、あなたが後で呼び出すことができます別の関数、取得します:

をフィードバックのための
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、今私はそれを理解していることを私は、その最高の説明だと思うように:

公共購読:(subscribeFunction:(状態)=>無効)

//最初の部分は何も返さない関数を受け入れるsubscribeFunction用です

=>()=> void;それは何も返さない関数を返しますとしての地位をサブスクライブするために

// 2番目のポーションは...と私は、このようなコードが

関連する問題