Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Projeto] Property 'prototype' is missing in type 'HTMLElement' but required in type '{ new (): HTMLElement; prototype: HTMLElement; }

Olá, atualmente estou enfrentando o seguinte erro no decorator domInjector: "Property 'prototype' is missing in type 'HTMLElement' but required in type '{ new (): HTMLElement; prototype: HTMLElement; }".

O meu código está da seguinte forma.

export function injectDom(seletor: string) {

    return function(target:any, propertyKey: string) {

        console.log('Modificando o prototype ---')
        let elemento = HTMLElement;

        const getter = function () {

            if(!elemento) {
                elemento =  document.querySelector(seletor) as HTMLElement // O ERRO OCORRE NESSA LINHA
                console.log(`Buscando elemento do DOM com o seletor ${seletor} para injetar em ${propertyKey}`)
            }

            return elemento
        }

        Object.defineProperty(
            target, 
            propertyKey, 
            {get: getter}
        )
    }
}
elemento =  <HTMLElement>document.querySelector(seletor) // Também ocorre o mesmo error
1 resposta
solução!

Olá, Lucas!

O erro que você está vendo é porque o TypeScript está esperando um construtor para o HTMLElement, mas você está atribuindo uma instância de HTMLElement à variável elemento.

A linha let elemento = HTMLElement; está dizendo ao TypeScript que a elemento é uma instância de HTMLElement, mas na verdade, você quer que elemento seja um tipo de HTMLElement ou null.

Para corrigir isso, você pode fazer deste modo:

let elemento: HTMLElement | null = null;

Então, quando você fizer a atribuição elemento = document.querySelector(seletor) as HTMLElement;, o TypeScript entenderá que elemento é um HTMLElement ou nulo.

Portanto, seu código ficaria assim:

export function injectDom(seletor: string) {

    return function(target:any, propertyKey: string) {

        console.log('Modificando o prototype ---')
        let elemento: HTMLElement | null = null;

        const getter = function () {

            if(!elemento) {
                elemento =  document.querySelector(seletor) as HTMLElement 
                console.log(`Buscando elemento do DOM com o seletor ${seletor} para injetar em ${propertyKey}`)
            }

            return elemento
        }

        Object.defineProperty(
            target, 
            propertyKey, 
            {get: getter}
        )
    }
}

Se a dúvida persistir, estamos disponíveis aqui na plataforma. :)

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.