2016-08-03 4 views
3

ich eine Art von Asynchron-Funktion zu definieren versucht, aber in der Zusammenstellung fehlgeschlagen ist, siehe unten:In Typoskript, wie Art der Asynchron-Funktion definieren

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 '' 
    } 
} 

Kann mir jemand dabei helfen herauszufinden?

+0

Versprechen funktioniert nicht? – toskv

+0

Bitte zeigen Sie, wie/wo Sie 'Fn' definieren. –

Antwort

2

Es ist für mich zu kompilieren scheint, wenn ich das async Schlüsselwort aus der Schnittstelle einfach fallen:

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

Wenn Sie den Code zeigen wollen, dass es async ist, dann vielleicht etwas tun:

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

Ja, ich habe es auch versucht. Async kann nicht Teil der Deklaration sein. – Ron

20

Gefunden diese Suche, wie ein "typedef" für eine asynchrone Pfeilfunktion zu deklarieren.

Es funktioniert, wenn Sie nur den Rückgabetyp der Funktion deklarieren ein Versprechen zu sein:

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

oder als eine Art delcaration:

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

Smart, danke, async func ist eigentlich eine Promise zurückgegebene Funktion. – Ron

+5

Dies sollte wirklich die akzeptierte Antwort sein – Ascherer

Verwandte Themen