Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Anotação @debounce() gera erro no firefox 61.0.1

O código da anotação debounce() gera erro no firefox como event not defined, abaixo segue o código da função:

export function debounce(milissegundos = 500) {

    return function(target, key, descriptor) {

        const metodoOriginal = descriptor.value;

        let timer = 0;

        descriptor.value = function(...args) {

            if(event) event.preventDefault();
            clearInterval(timer);
            timer = setTimeout(() => metodoOriginal.apply(this, args), milissegundos);
        }

        return descriptor;
    }
}

Aparentemente o erro esta relacionado com a linha "if(event) event.preventDefault();", eu não entendi porque precisamos desta linha aqui se ela já esta presente no arquivo BindEvent.js. Alguem mais teve este problema? Ou imagina o que pode causar este comportamento? Comentando apenas esta linha o código parece funcionar.

2 respostas

O Firefox não declara implicitamente o event. Parece que ele mudou. O mais correto seria ter esse if, mas funcionando sem você pode removê-lo. Isso é coisa do navegador mesmo é não do TypeScript.

solução!

Obrigado pela dica Flavio, fazendo o curso de TypeScript eu entendi melhor a dinamica, e facilitou para encontrar uma solução. Eu alterei o código da forma abaixo para manter a execução do preventDefault() acho que ficou legal.

Dessa forma eu testo se existe um argumento na lista de argumentos que tem uma função preventDefault() se tiver eu executo.

export function debounce(milissegundos = 500) {

    return function(target, key, descriptor) {

        const metodoOriginal = descriptor.value;

        let timer = 0;

        descriptor.value = function(...args) {

            args.forEach(argumento => {
                if(argumento.preventDefault()) argumento.preventDefault();
            });
            clearInterval(timer);
            timer = setTimeout(() => metodoOriginal.apply(this, args), milissegundos);
        }

        return descriptor;
    }
}

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software