Я попытался определить тип асинхронной функции, но не смог скомпилировать, см. Ниже:
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 ''
}
}
Может ли кто-нибудь помочь мне разобраться с этим?
typescript
Рон
источник
источник
Fn
.Ответы:
Нашел этот поиск, как объявить "typedef" для асинхронной стрелочной функции.
Это работает, если вы просто объявите возвращаемый тип функции Promise:
interface SearchFn { (subString: string): Promise<boolean>; }
или как объявление типа:
type SearchFn = (subString: string) => Promise<boolean>;
Microsoft TS Linter порекомендует второй синтаксис.
источник
): Promise<undefined>
терпит неудачу для меня. Мне просто нужна функция async, чтобы я мог использовать ееawait
внутри ...async
Ключевое слово используется для указания компилятора / выполнения , что рассматриваемая функция будет использоватьawait
внутри (так он может поставить в нужном подмостей , чтобы включить его ).Это значит, что
async
имеет значение только для реализации функции, но не для ее интерфейса . Поэтому наличиеasync
метода интерфейса бесполезно, вы хотите сказать, что функция возвращает определенноеPromise
(в вашем случаеPromise<string>
), но вы не хотите, чтобы средство реализации интерфейса реализовало это определенным образом (используяawait
).Как говорили до меня другие:
interface SearchFn { (subString: string): Promise<string>; }
Затем любой, кто решит реализовать эту функцию, может использовать
async
простой старойPromise.then
или, возможно, даже какой-то новой методологии, которая появится в будущем.источник
Передайте тип возвращаемого объекта в универсальный объект Promise.
type SearchFn = (subString: string): Promise<string>;
В качестве альтернативы вы можете объявить
AsyncFunction
универсальный тип.type AsyncFunction <A,O> = (...args:A) => Promise<O> type SearchFn = AsyncFunction<[string], string>
AsyncFunction - это универсальный тип, который принимает две переменные типа - тип ввода (A) и тип вывода.
источник