Manipulação de Eventos em TypeScript

Manipulação de Eventos em TypeScript

Este artigo explica a manipulação de eventos em TypeScript.

Você pode aprender sobre métodos de manipulação de eventos e eventos personalizados através de exemplos de código.

YouTube Video

Manipulação de Eventos em TypeScript

O tratamento de eventos em TypeScript é feito da mesma forma que em JavaScript. No entanto, o TypeScript melhora a segurança de tipos, permitindo lidar com eventos de forma mais segura usando os tipos de eventos apropriados. O básico da manipulação de eventos envolve adicionar ouvintes de eventos aos elementos DOM e executar ações em resposta às operações do usuário.

Adicionando Ouvintes de Eventos

Ouvintes de eventos são adicionados aos elementos DOM usando o método addEventListener. Por exemplo, para tratar um evento de clique, você faria o seguinte:.

1const button = document.getElementById('myButton');
2if (button) {
3    button.addEventListener('click', (event) => {
4        console.log('Button was clicked');
5    });
6}
  • Neste código, addEventListener é usado para registrar um manipulador para o evento de clique no elemento DOM especificado.

Tipos de Eventos em TypeScript

Em TypeScript, o objeto event recebido no ouvinte de eventos recebe automaticamente o tipo apropriado. O objeto event possui diferentes propriedades dependendo do tipo de evento, mas seu tipo base é Event.

Usando o tipo apropriado para cada evento, você pode aproveitar a segurança de tipos do TypeScript em seu desenvolvimento.

Principais Tipos de Eventos

  1. Event Event é o tipo base para eventos comuns. Usado para situações como envio de formulários ou conclusão de carregamento de página.
1const form = document.getElementById('myForm');
2if (form) {
3    form.addEventListener('submit', (event: Event) => {
4        event.preventDefault();  // Prevent the default form submission
5        console.log('Form was submitted');
6    });
7}
  • Este código detecta o evento de envio do formulário, impede a ação padrão de envio e exibe uma mensagem no console em vez disso.
  1. MouseEvent

    MouseEvent é um tipo de evento relacionado a ações do mouse, como cliques e movimento do mouse. Você pode obter informações sobre as coordenadas do mouse e qual botão foi clicado.

1const button = document.getElementById('myButton');
2if (button) {
3    button.addEventListener('click', (event: MouseEvent) => {
4        // Log the click position
5        console.log(`Click position: X=${event.clientX}, Y=${event.clientY}`);
6    });
7}
  • Este código obtém as coordenadas do mouse quando o botão é clicado e as exibe no console.
  1. KeyboardEvent KeyboardEvent é um tipo de evento relacionado à entrada do teclado. Você pode acessar a tecla pressionada e o estado de teclas modificadoras (Shift, Alt, Ctrl, etc.).
1document.addEventListener('keydown', (event: KeyboardEvent) => {
2    // Log the pressed key
3    console.log(`Key pressed: ${event.key}`);
4    if (event.ctrlKey) {
5        // Log that the Ctrl key was pressed
6        console.log('Ctrl key was pressed');
7    }
8});
  • Este código exibe o nome da tecla pressionada e, se a tecla Ctrl estiver pressionada, também mostra essa informação no console.
  1. InputEvent InputEvent é um tipo de evento relacionado a alterações em campos de entrada. É usado quando o valor de um campo de texto ou textarea é alterado.
1const input = document.getElementById('myInput') as HTMLInputElement;
2if (input) {
3    input.addEventListener('input', (event: InputEvent) => {
4        // Log the entered value
5        console.log(`Entered value: ${input.value}`);
6    });
7}
  • Este código exibe o conteúdo do campo de entrada no console sempre que seu valor muda.
  1. FocusEvent FocusEvent é um tipo de evento que ocorre quando um elemento ganha ou perde o foco.
 1const input = document.getElementById('myInput');
 2if (input) {
 3    input.addEventListener('focus', (event: FocusEvent) => {
 4        // Log when the input gains focus
 5        console.log('Focused');
 6    });
 7
 8    input.addEventListener('blur', (event: FocusEvent) => {
 9        // Log when the input loses focus
10        console.log('Blurred');
11    });
12}
  • Este código exibe "Focused" no console quando o campo de entrada recebe foco e "Blurred" quando perde o foco.

Tratando Eventos Personalizados com Asserção de Tipo

Para eventos personalizados ou quando a inferência de tipo do TypeScript não funcionar, você pode especificar explicitamente o tipo usando asserção de tipo.

Por exemplo, para tratar um evento de um campo de entrada específico (HTMLInputElement), especifique o tipo da seguinte forma:.

1const input = document.getElementById('myInput') as HTMLInputElement;
2if (input) {
3    input.addEventListener('input', (event: Event) => {
4        const target = event.target as HTMLInputElement;
5        // Log the entered value
6        console.log(`Entered value: ${target.value}`);
7    });
8}
  • Este código usa asserção de tipo para tratar o alvo do evento como um HTMLInputElement e exibe seu valor no console.

Removendo Ouvintes de Eventos

Você pode remover ouvintes de eventos usando removeEventListener. Para isso, é necessário passar o mesmo manipulador de evento que foi adicionado inicialmente.

 1const button = document.getElementById('myButton');
 2
 3const handleClick = (event: MouseEvent) => {
 4    // Log when the button is clicked
 5    console.log('Button was clicked');
 6};
 7
 8if (button) {
 9    button.addEventListener('click', handleClick);
10
11    // Remove the event listener later
12    button.removeEventListener('click', handleClick);
13}
  • Este código adiciona um ouvinte de evento de clique ao botão e depois o remove especificando o mesmo manipulador.

Criando Eventos Personalizados

Em TypeScript, além dos eventos padrão, você também pode criar e disparar eventos personalizados. Use a classe CustomEvent para criar um evento personalizado e dispará-lo com o método dispatchEvent.

 1const customEvent = new CustomEvent('myCustomEvent', { detail: { name: 'TypeScript' } });
 2const div = document.getElementById('myDiv');
 3
 4if (div) {
 5    div.addEventListener('myCustomEvent', (event: CustomEvent) => {
 6        // Log when the custom event is fired
 7        console.log(`Custom event was triggered: ${event.detail.name}`);
 8    });
 9
10    div.dispatchEvent(customEvent);  // Dispatch the custom event
11}
  • Este código cria um evento personalizado usando CustomEvent, o despacha para o elemento e exibe seus detalhes no console.

Controlando a Propagação de Eventos

Quando um evento ocorre, por padrão ele é propagado (para elementos pai). Para evitar isso, use event.stopPropagation(). Você também pode usar preventDefault() para impedir o comportamento padrão do navegador.

 1const button = document.getElementById('myButton');
 2if (button) {
 3    button.addEventListener('click', (event: MouseEvent) => {
 4        event.preventDefault();  // Prevent the default action
 5        event.stopPropagation();  // Stop the event propagation
 6
 7        // Log that event handling has been customized
 8        console.log('Custom event handling');
 9    });
10}
  • Este código desativa a ação padrão quando o botão é clicado, impede o bubble do evento e executa um processamento personalizado.

Resumo

O tratamento de eventos em TypeScript é basicamente o mesmo que em JavaScript, mas com definições de tipos adequadas, você pode trabalhar com objetos de evento e elementos DOM de forma mais segura e confiável. Ao adicionar e remover ouvintes de eventos, aplicar tipos de eventos e usar asserções de tipo, você pode obter um tratamento de eventos mais claro e com menos propensão a erros.

Você pode acompanhar o artigo acima usando o Visual Studio Code em nosso canal do YouTube. Por favor, confira também o canal do YouTube.

YouTube Video