javascript - Como posso definir uma interface Typescript para uma função?
Estou definindo a seguinte interface do Typescript. clickCustomButton1 não deve retornar nada, mas não tenho certeza de como especificar isso.
interface IButtonTemplate {
clickCustomButton1: (); // How can I say this should return nothing?
// more code here
}
Eu uso isto no meu código assim:
clickCustomButton1: null
então mais tarde:
newTopicTests = () => {
}
clickCustomButton1 = this.newTopicTests();
Está me dando um erro dizendo:
Error 2 Cannot convert 'void' to '() => boolean'
Alguém pode me dar uma ideia do que estou fazendo de errado? O que eu acho que preciso fazer é especificar que clickCustomButton1 e também o newTopicTests não retornam nada. Mas como posso fazer isso com Typescript?
Resposta #1
O problema é porque o lambda () => {} é tipado como (): void porque não retorna nada e, portanto, não tem nenhum [outro] tipo inferido.
Assim, dado f =() => {}, a expressão f() também é tipada como void - mas clickCustomButton1 deve retornar um boolean conforme declarado.
Compare ao usar o seguinte lambda, que é tipado como (): boolean, que agora é válido em termos de tipo:
newTopicTests = () => true
Outra maneira de ver esse problema é escrever o código original como:
newTopicTests = (): boolean => {}
(Isso também falhará na compilação, mas mostrará o erro mais próximo de onde está a fonte.)
Após as atualizações na pergunta..
Para declarar um método em uma Interface que não retorna nada, use:
clickCustomButton1(): void;
Para declarar um membro que tem o tipo (): void, use
clickCustomButton1: () => void;
Observe também que null é algo, enquanto void representa nada.
