Se, antes de se interessar por JavaScript, você escreveu em idiomas tradicionais com digitação forte, talvez esteja familiarizado com o conceito de
void . Esse é o tipo cujo uso informa ao programador que as funções e métodos correspondentes não retornam nada quando chamados.

A entidade
void também está disponível em JavaScript e TypeScript. Em JS, este é um operador. No TS, esse é um tipo de dados primitivo. E aqui e ali, o
void não se comporta como muitos daqueles que se depararam com o
void em outros idiomas esperariam.
Declaração de void JavaScript
Em JavaScript, o operador
void avalia a expressão passada para ele. Ao mesmo tempo, não importa qual expressão seja avaliada,
void sempre retorna
undefined .
let i = void 2;
Por que precisamos desse operador?
Primeiramente, deve-se notar que, nos primeiros anos da programação JS, os desenvolvedores poderiam redefinir
undefined e agregar algum valor a ele. Mas
void sempre retorna o valor verdadeiro de
undefined .
Em segundo lugar, o uso do operador
void é uma maneira interessante de trabalhar com funções chamadas imediatamente:
void function() { console.log('What') }()
E tudo isso - sem poluição do espaço para nome global:
void function aRecursion(i) { if(i > 0) { console.log(i--) aRecursion(i) } }(3) console.log(typeof aRecursion)
Como o operador
void sempre retorna
undefined e sempre avalia a expressão passada para ele, temos uma maneira muito expressiva de retornar da função sem retornar algum valor, mas com uma chamada, por exemplo, algum retorno de chamada:
Isso nos leva à maneira mais importante de usar o
void . Esse operador é um tipo de aplicativo "posto de guarda". Se uma certa função sempre retornar
undefined , isso pode ser alcançado usando o operador
void .
button.onclick = () => void doSomething();
Tipo de dados nulos no TypeScript
O tipo
void no TypeScript pode ser chamado de algo como o oposto do tipo
any . Funções em JavaScript sempre retornam algo. Este pode ser um valor definido pelo programador ou
undefined :
function iHaveNoReturnValue(i) { console.log(i) }
Como as funções JavaScript, das quais nada é explicitamente retornado, sempre retornam
undefined , o
void no TypeScript é o tipo apropriado para informar aos desenvolvedores que a função retorna
undefined :
declare function iHaveNoReturnValue(i: number): void
A entidade
void na forma de um tipo também pode ser usada para parâmetros e para quaisquer outras declarações de variáveis. O único valor que sempre pode ser passado para o parâmetro void é
undefined .
declare function iTakeNoParameters(x: void): void iTakeNoParameters() // iTakeNoParameters(undefined) // iTakeNoParameters(void 2) //
Como resultado, verifica-se que no TS os tipos
void e
undefined são quase a mesma coisa. Mas há uma pequena diferença entre eles, que, de fato, é extremamente importante. O tipo de retorno retornado pode ser substituído por outros tipos, o que permite implementar padrões avançados para trabalhar com retornos de chamada.
function doSomething(callback: () => void) { let c = callback()
Os desenvolvedores esperam que esses designs, geralmente usados em aplicativos JS, façam exatamente isso.
Aqui está o material sobre este tópico.
Se você deseja que uma função aceite apenas funções que retornam
undefined , você pode alterar a assinatura do método adequadamente:
Sumário
O operador
void no JavaScript e o tipo de dados
void no TypeScript são entidades bastante simples. O intervalo de situações em que são aplicáveis é limitado. No entanto, deve-se notar que o programador que os utiliza, provavelmente, não encontrará problemas ao trabalhar com eles.
Caros leitores! Você usa
void em JS e TS?
