2016-01-21 66 views
8

使用打字稿...你能通過打字稿解釋這個奇怪的ES6箭頭功能嗎?

public subscribe:(subscribeFunction:(state)=>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

我一直以爲你會做一個:無效的函數,它不會返回任何東西,我猜想有多種方法... 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;

//第二藥水是對認購本身,因爲它會返回一個不返回任何內容的功能......和我同意,這樣的代碼應該更明確