Intenté definir un tipo de función asíncrona, pero fallé en la compilación, ver a continuación:
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 ''
}
}
¿Alguien puede ayudarme a resolver esto?
typescript
Ron
fuente
fuente
Fn
.Respuestas:
Encontré esto buscando cómo declarar un "typedef" para una función de flecha asíncrona.
Funciona si simplemente declara el tipo de retorno de la función como una Promesa:
interface SearchFn { (subString: string): Promise<boolean>; }
o como una declaración de tipo:
type SearchFn = (subString: string) => Promise<boolean>;
TS Linter de Microsoft recomendará esta segunda sintaxis.
fuente
): Promise<undefined>
me está fallando. Solo necesito una función asincrónica para poder usarlaawait
dentro ...La
async
palabra clave se usa para indicar al compilador / tiempo de ejecución que la función en cuestión usaráawait
internamente (para que pueda poner el andamiaje requerido para habilitarla ).Esto significa que
async
solo tiene significado para la implementación de la función, no su interfaz . Por lo tanto, tenerasync
un método de interfaz no es útil, quiere decir que la función devuelve un ciertoPromise
(en su casoPromise<string>
) pero no quiere exigir que el implementador de la interfaz lo implemente de cierta manera (usandoawait
).Entonces, como otros dijeron antes que yo:
interface SearchFn { (subString: string): Promise<string>; }
Entonces, quien decida implementar esta función puede optar por utilizar una metodología
async
antiguaPromise.then
o tal vez incluso alguna nueva que surgirá en el futuro.fuente
Pase el tipo de objeto devuelto al genérico Promise.
type SearchFn = (subString: string): Promise<string>;
Alternativamente, puede declarar un
AsyncFunction
tipo genérico.type AsyncFunction <A,O> = (...args:A) => Promise<O> type SearchFn = AsyncFunction<[string], string>
AsyncFunction es un tipo genérico que recibe dos variables de tipo: el tipo de entrada (A) y el tipo de salida.
fuente