Eu tenho a seguinte classe no TypeScript:
class CallbackTest
{
public myCallback;
public doWork(): void
{
//doing some work...
this.myCallback(); //calling callback
}
}
Estou usando a classe assim:
var test = new CallbackTest();
test.myCallback = () => alert("done");
test.doWork();
O código funciona e, portanto, exibe uma caixa de mensagens conforme o esperado.
Minha pergunta é: Existe algum tipo que eu possa fornecer para o meu campo de classe myCallback
? No momento, o campo público myCallback
é do tipo any
conforme mostrado acima. Como posso definir a assinatura do método do retorno de chamada? Ou posso apenas definir o tipo para algum tipo de retorno de chamada? Ou posso fazer nada disso? Eu tenho que usar any
(implícito / explícito)?
Eu tentei algo assim, mas não funcionou (erro em tempo de compilação):
public myCallback: ();
// or:
public myCallback: function;
Não encontrei nenhuma explicação para isso on-line, então espero que você possa me ajudar.
fonte
Para ir um passo adiante, você pode declarar um ponteiro de tipo para uma assinatura de função como:
e use-o assim:
fonte
let callback: myCallbackType|null = null;
type MyHandler = (myArgument: string) => void
vez disso. (Tipos de chamada)" ; veja a resposta da TSV...args: any[]
. Exemplo: interface de exportação MyInterface {/ ** Uma função de retorno de chamada. / callback: (... args: any []) => any, / * Parâmetros para a função de retorno de chamada. * / callbackParams: any []}Você pode declarar um novo tipo:
Atualizar.
A
declare
palavra-chave não é necessária. Ele deve ser usado nos arquivos .d.ts ou em casos semelhantes.fonte
var handler: (myArgument: string) => void
é sintaticamente válida (se um pouco bagunçada).Aqui está um exemplo - não aceitando parâmetros e retornando nada.
Se você deseja aceitar um parâmetro, também pode adicioná-lo:
E se você deseja retornar um valor, você pode adicionar também:
fonte
exactly equivalent
.Se você deseja uma função genérica, pode usar o seguinte. Embora não pareça estar documentado em nenhum lugar.
fonte
Você pode usar o seguinte:
type
palavra-chave, alias uma literal de função)Aqui está um exemplo de como usá-los:
fonte
Me deparei com o mesmo erro ao tentar adicionar o retorno de chamada a um ouvinte de evento. Estranhamente, a configuração do tipo de retorno de chamada como EventListener o resolveu. Parece mais elegante do que definir uma assinatura de função inteira como um tipo, mas não tenho certeza se essa é a maneira correta de fazer isso.
fonte
Estou um pouco atrasado, mas, já há algum tempo, no TypeScript, você pode definir o tipo de retorno de chamada com
Exemplo de uso:
fonte