Pesquisa de site

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.