1
resposta

05 Ativando strictNullChecks

Bom dia pessoal!

Estou com um problema após a ativação do strictNullChecks, esse erro não foi apresentado em aula.

O erro é apresentado em NegociacaoController, erro nas linhas abaixo:

new Date(this._inputData.val().toString().replace(/-/g, ',')),  //ERRO NESSA LINHA - Object is possibly 'undefined'
parseInt(this._inputQuantidade.val().toString()), //ERRO NESSA LINHA - Object is possibly 'undefined'
parseFloat(this._inputValor.val().toString()) //ERRO NESSA LINHA - Object is possibly 'undefined'

Segue abaixo o código completo:

import { NegociacoesView, MensagemView } from './../views/index';
import { Negociacao, Negociacoes } from './../models/index';

export class NegociacaoController{
    private _inputData : JQuery;
    private _inputQuantidade : JQuery;
    private _inputValor : JQuery;
    private _negociacoes = new Negociacoes();
    private _nregociacoesView = new NegociacoesView('#negociacoesView');
    private _mensagemView = new MensagemView('#mensagemView');

    constructor(){
        this._inputData = $('#data');
        this._inputQuantidade = $('#quantidade');
        this._inputValor = $('#valor');
        // carrega a tabela na tela
        this._nregociacoesView.update(this._negociacoes);
    }

    adiciona(event : Event){

        event.preventDefault();
        const negociacao = new Negociacao(
            new Date(this._inputData.val().toString().replace(/-/g, ',')),  //ERRO NESSA LINHA - Object is possibly 'undefined'
            parseInt(this._inputQuantidade.val().toString()), //ERRO NESSA LINHA - Object is possibly 'undefined'
            parseFloat(this._inputValor.val().toString()) //ERRO NESSA LINHA - Object is possibly 'undefined'
        );

        this._negociacoes.adiciona(negociacao);

        //atualiza a tabela com os dados recebidos no formulario
        this._nregociacoesView.update(this._negociacoes);
        this._mensagemView.update('Negociação adicionada com sucesso!');
    }
}
1 resposta

Olá, Tais! Tudo bem?

O TypeScript acredita que, possivelmente, esses objetos (this._inputData, this._inputQuantidade, this._inputValor) sejam indefinidos.

Você pode resolver isso colocando uma condição: apenas execute esse código se os objetos forem definidos. Como abaixo:

if (this._inputData && this._inputQuantidade && this._inputValor) {
    this._inputData.val()
    this._inputQuantidade.val()
    this._inputValor.val()
}

Espero ter ajudado!