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

Promise не работает? – toskv

+0

Пожалуйста, покажите, как/где вы определяете 'Fn'. –

ответ

2

кажется компилировать для меня, если я просто перенесите async ключевое слово из интерфейса:

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

Если вы хотите, чтобы код, чтобы показать, что это асинхронная, то, возможно, сделать что-то вроде:

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

Да, я тоже попробовал. Похоже, что async не может быть частью объявления типа. – Ron

20

Обнаружили этот поиск, как объявить «typedef» для функции async arrow.

Это работает, если вы просто объявить тип возвращаемого значения функции, чтобы быть Promise:

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

или как тип delcaration:

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

Умный, спасибо, async func на самом деле является возвращенной функцией Promise. – Ron

+5

Это действительно должен быть принятый ответ – Ascherer

Смежные вопросы