1
resposta

[Dúvida] Variavel diferente para soma

//Meu vscode reconheceu value com string
let valor = inputValor.value;

//Na hora de somar precisei fazer pase int
let valorInteiro = +inputValor.value;

como valor precisa também ser string tive que declarar outra variável,
Tem como utilizar mesma variável ?

1 resposta

Olá, Sergio. Como vai?

Excelente pergunta! Essa é uma dúvida muito comum quando estamos fazendo a transição do JavaScript para o TypeScript. No JavaScript puro, você poderia simplesmente reatribuir qualquer tipo de dado à mesma variável, mas o TypeScript, por ser uma linguagem fortemente tipada, entra em ação justamente para evitar que uma variável mude de tipo no meio do caminho, prevenindo bugs no sistema.

No seu código atual, quando você faz:

let valor = inputValor.value; // O TypeScript infere que 'valor' é do tipo string

A partir desse momento, o TypeScript "carimba" a variável valor como string. Se você tentar colocar o número convertido nela mais abaixo, o compilador vai acusar um erro de tipo.

Para responder diretamente à sua dúvida: sim, tem como utilizar a mesma variável, mas existem formas corretas e seguras de se fazer isso no TypeScript. Vamos analisar as melhores estratégias:


1. A Solução com Union Types (Tipos de União)

Se você precisa obrigatoriamente que a mesma variável armazene a string em um momento e o número convertido em outro, você deve avisar o TypeScript explicitamente que ela aceita ambos os tipos utilizando a barra vertical (|).

Veja como fica simples:

// Declaramos que a variável pode ser string OU number
let valor: string | number = inputValor.value; 

// Na hora de somar, convertemos e guardamos na mesma variável usando o operador '+'
valor = +valor; 

Por que essa abordagem é legal? Ela resolve o seu problema de não precisar criar duas variáveis (valor e valorInteiro), mantendo o código limpo.


2. A Solução com conversão direta (Recomendada)

Embora a solução acima funcione perfeitamente, vale a pena avaliar se você realmente precisa guardar a versão em string em algum momento do fluxo do objeto de nova transação.

Se o objetivo final daquela informação no seu script for apenas ser somada ou enviada como número, a melhor prática no TypeScript é fazer a conversão direto na captura do dado, matando o problema na raiz:

// Já captura o valor do input convertido para número em uma única linha
let valor: number = +inputValor.value;

Dessa forma, você trabalha com o tipo correto (number) do início ao fim e evita ter que ficar gerenciando uma variável que muda de comportamento.


Dica de Ouro sobre o operador +

Você usou o operador + antes do inputValor.value para fazer a conversão. Parabéns por isso! Essa técnica (chamada de operador unário de adição) é uma forma extremamente elegante e performática no ecossistema JavaScript/TypeScript para converter strings numéricas em números, sendo frequentemente preferida em relação ao parseInt() por ser mais curta e direta.

Aproveite que está desbravando o TypeScript e teste a primeira solução adicionando o tipo de união (string | number) no seu projeto para ver o erro do VS Code sumir na hora!

Espero que possa ter lhe ajudado!