2016-08-03 61 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