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

Na video-aula 06, é sugerido que deixemos o cursor em cima do metodo querySelector para ver o tipo retornado que no caso é o tipo Element, mas quando sigo o mesmo procedimento o tipo do retorno é o tipo any. Gostaria de saber o que esta errado?

class NegociacaoController {


    private _inputData;
    private _inputQuantidade;
   private _inputValor; 

    constructor(){
        this._inputData = document.querySelector('#data');//exibe o tipo any
        this._inputQuantidade = document.querySelector('#quantidade');
        this._inputValor = document.querySelector('#valor');
    }
5 respostas

Fala aí Marcos, tudo bem? Precisa verificar a versão do seu vscode e TypeScript, as vezes ele não está entendendo muito bem o arquivo types.d ou o mesmo está definindo que o querySelector retorna any.

Espero ter ajudado.

Obrigado por responder, Matheus! As únicas coisas que estão diferentes são o node cuja versão é v8.11.4, versão superior a citada no curso " versão 6.X ou versões superiores" que segundo a aula "02 - Infraestrutura necessária" não seria problema , e a versão do VSCode que neste caso é 1.37.1 enquanto na mesma aula a versão do VSCode é 1.37. Como devo proceder?

Fala Marcos, para resolver o problema você precisa tipar o retorno, isso pode ser feito através do generics do TypeScript:

this._inputName = document.querySelector<HTMLInputElement>('#input-name')

Nesse exemplo eu defini que estou buscando um elemento do tipo input.

Você pode mudar para os seus (caso não seja input).

Agora que estamos informando o tipo <TIPO> a função querySelector sabe o que deveria retornar.

Espero ter ajudado.

Bom dia, Matheus! Eu fiz isso e o projeto esta executando perfeitamente, mas a minha dúvida reside no fato de quando paro o cursor em cima de querySelector o VSCode informa que o valor de retorno é "any" e não "Element" conforme a aula 06. O versão do TypeScript instalado é a memsa neste caso "^2.3.2", o Node instalado é uma versão superior ao que foi demonstrado na aula mas poderia ser superior segundo a aula, neste caso o meu Node é v8.11.4 e por fim a versão do VSCode é 1.37.1. Segundo a aula 06 para verificar o tipo dos atributos da classe NegociacaoController bastaria eu parar o cursor em cima do querySelector e em seguida atribuir este tipo a "_inputData" por exemplo, conforme eu relatei o valor de retorno é any e gostaria de entender qual o problema, mas em todo caso para não ficar preso a isto eu "tipei" conforem a aula e estou seguindo em frente. Espero que isto não seja um problema nas próximas aulas. De qualquer forma muito obrigado, Matheus. Se tiver alguma sugestão; estou pronto para ouvir.

solução!

Sim, ele vai retornar any porque você não tipou o retorno, a função querySelector faz uso do generics do TypeScript para definir o que será retornado.

Se você não passar nada, ele sabe definir o tipo do seu generics, portanto, ele pode ser qualquer coisa, logo, ele pode ser any.

Outro detalhe, se você está fazendo o .querySelector e atribuindo ele para uma variável, o tipo dessa variável também vai implicar no tipo de retorno, Ex:

export class Some {
    private _someElement
    constructor() {
        this._someElement = document.querySelector('.some__element')
    }
}

Nesse exemplo, o tipo de retorno será any porque minha variável é any.

Porém, caso eu tipe ela:

export class Some {
    private _someElement: Element
    constructor() {
        this._someElement = document.querySelector('.some__element')
    }
}

Aí o retorno passa a ser do tipo Element ou o que eu definir no generics (<?>).

Essa é a definição do `