1
resposta

Problemas com os inputs no NegociacaoController.ts ao usar o strictNullChecks

Estou com problema no NegociacaoController, com os inputs da página.

No construtor:

 constructor() {
        this._inputData = $('#data');
        this._inputQuantidade = $('#quantidade');
        this._inputValor = $('#valor');
    }

Ai na função de adicionar, ao tentar pegar o .val() dos inputs com:

this._inputData.val()
this._inputQuantidade.val()
this._inputValor.val()

Recebo o erro "Object is possibly 'undefined'".

Segue abaixo a página HTML

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Negociações</title>
    <link rel="stylesheet" href="css/bootstrap.css">
    <link rel="stylesheet" href="css/bootstrap-theme.css">
</head>

<body class="container">

    <h1 class="text-center">Negociações</h1>

    <div id="mensagemView"></div>

    <form class="form">

        <div class="form-group">
            <label for="data">Data</label>
            <input type="date" id="data" class="form-control" required autofocus/>        
        </div>    

        <div class="form-group">
            <label for="quantidade">Quantidade</label>
            <input type="number" min="1" step="1" id="quantidade" class="form-control" value="1" required/>
        </div>

        <div class="form-group">
            <label for="valor">Valor</label>
            <input id="valor" type="number" class="form-control"  min="0.01" step="0.01" value="0.0" required />
        </div>

        <button class="btn btn-primary" type="submit">Incluir</button>
    </form>

    <br>
    <br>

    <div id="negociacoesView"></div>
    <script src="lib/jquery.min.js"></script>
    <script src="lib/system.js"></script>
    <script>
        System.defaultJSExtensions = true;
        System.import('js/app.js').catch(err => console.error(err));
    </script>
</body>
</html>
1 resposta

Fala ai Ricardo, tudo bem? Esse erro é o compilador do TypeScript, isso porque sua função $ pode retornar undefined, sendo assim, iria quebrar o código em tempo de execução.

Você precisa adicionar um if no seu código para verificar se realmente as variaveis tem valor, algo assim:

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

Espero ter ajudado.