2016-08-03 54 views
3

我試圖定義一種異步函數,但是在編譯失敗的類型,見下圖:在打字稿,如何定義異步功能

interface SearchFn { 
    async (subString: string): string; 
} 

class A { 
    private Fn: SearchFn 
    public async do():Promise<string> { 
     await this.Fn("fds") // complain here: cannot invoke an expression whose type lacks a call signature 
     return '' 
    } 
} 

誰能幫助我來解決這一問題?

+0

無極不起作用? – toskv

+0

請說明你如何/在哪裏定義'Fn'。 – 2016-08-03 13:46:20

回答

2

它看起來編譯對我來說,如果我只是從接口刪除async關鍵字:

interface SearchFn { 
    (subString: string): boolean; 
} 

如果你想要的代碼,以表明它是異步的話,也許這樣做:

interface SearchFn { 
    /* async */ (subString: string): boolean; 
} 
+0

是的,我也試過。看起來像異步不能是類型聲明的一部分。 – Ron

20

找到這個搜索如何爲異步箭頭函數聲明「typedef」。

它的工作原理,如果你只是聲明函數的返回類型是一個承諾:

interface SearchFn { 
    (subString: string): Promise<boolean>; 
} 

或者作爲一種delcaration:

type SearchFn = (subString: string) => Promise<boolean>; 
+0

聰明,謝謝,async func實際上是一個Promise的返回函數。 – Ron

+5

這應該是被接受的答案 – Ascherer