Tengo la siguiente clase en TypeScript:
class CallbackTest
{
public myCallback;
public doWork(): void
{
//doing some work...
this.myCallback(); //calling callback
}
}
Estoy usando la clase así:
var test = new CallbackTest();
test.myCallback = () => alert("done");
test.doWork();
El código funciona, por lo que muestra un cuadro de mensaje como se esperaba.
Mi pregunta es: ¿Hay algún tipo que pueda proporcionar para mi campo de clase myCallback
? En este momento, el campo público myCallback
es del tipo any
que se muestra arriba. ¿Cómo puedo definir la firma del método de la devolución de llamada? ¿O puedo establecer el tipo en algún tipo de devolución de llamada? ¿O puedo hacer menos de estos? ¿Tengo que usar any
(implícito / explícito)?
Intenté algo como esto, pero no funcionó (error en tiempo de compilación):
public myCallback: ();
// or:
public myCallback: function;
No pude encontrar ninguna explicación a esto en línea, así que espero que me puedan ayudar.
fuente
Para ir un paso más allá, puede declarar un puntero de tipo a una firma de función como:
y úsalo así:
fuente
let callback: myCallbackType|null = null;
type MyHandler = (myArgument: string) => void
en su lugar. (Tipos invocables)" ; ver la respuesta de TSV...args: any[]
. Ejemplo: interfaz de exportación MyInterface {/ ** Una función de devolución de llamada. / callback: (... args: any []) => any, / * Parámetros para la función de devolución de llamada. * / callbackParams: any []}Puedes declarar un nuevo tipo:
Actualizar.
La
declare
palabra clave no es necesaria. Debe usarse en los archivos .d.ts o en casos similares.fuente
var handler: (myArgument: string) => void
es sintácticamente válida (si está un poco desordenada).Aquí hay un ejemplo: no aceptar parámetros y no devolver nada.
Si desea aceptar un parámetro, también puede agregarlo:
Y si desea devolver un valor, también puede agregarlo:
fuente
exactly equivalent
.Si desea una función genérica, puede usar lo siguiente. Aunque no parece estar documentado en ningún lado.
fuente
Puedes usar lo siguiente:
type
palabra clave, aliasing una función literal)Aquí hay un ejemplo de cómo usarlos:
fuente
Encontré el mismo error al intentar agregar la devolución de llamada a un detector de eventos. Curiosamente, establecer el tipo de devolución de llamada en EventListener lo resolvió. Parece más elegante que definir una firma de función completa como un tipo, pero no estoy seguro de si esta es la forma correcta de hacerlo.
fuente
Llego un poco tarde, pero desde hace algún tiempo en TypeScript puede definir el tipo de devolución de llamada con
Ejemplo de uso:
fuente