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

[Dúvida] number vs Number, string vs String

Fala pessoal, beleza? Eu gostaria de saber se tem diferença entre os tipos: number e N*umber, string e *String Vi que alguns casos o TS diz que string não pode ser atribuído em String, ou number não pode ser atribuído em Number.

2 respostas
solução!

Olá! Tudo bem? A diferença é que number e string são dois tipos primitivos do JavaScript, que representam números e textos. Enquanto Number e String são classes chamadas de wrappers (pode ser traduzido para embrulho) que vão "empacotar" os tipos primitivos. Number e String também podem ser chamados como funções que vão realizar ou garantir uma conversão de tipos seja feita. Veja alguns exemplos:

typeof 100; // number
typeof Number(100); // number
typeof Number("100"); // number, realizando a conversão de string para number

typeof new Number(100); // object, pois neste caso está sendo chamado o construtor da classe wrapper Number

Nesse último caso podemos chamar o construtor com a palavra new e assim criar um objeto do tipo Number, que vai armazenar informações a mais, como o valor primitivo do número e outros métodos. No caso das strings:

typeof "oi"; // string
typeof String("oi"); // string
typeof String(100); // string, realizando a conversão de number para string

typeof new String(100); // object, já que usamos new

Se verificarmos o conteúdo do retorno de String(100) e new String(100) teremos:

console.log(String(100)); // "100"

console.log(new String(100)); // Nesse caso teremos alguma coisa assim:
//String {'100'}
// 0: "1"
// 1: "0"
// 2: "0"
// length: 3
// [[Prototype]]: String
// [[PrimitiveValue]]: "100"

Mesmo aparecendo mais coisas no console.log de new String, todos os atributos e índices que aparecem também são acessíveis para variáveis do tipo string, então Number e String são vantajosos quando precisamos realizar alguma conversão explícita e não há muita utilidade em usar eles como uma classe wrapper e instanciar objetos com new. Uma coisa interessante é que existem várias conversões diferentes que podemos fazer usando Number e String, como transformar de Date para number. Resumindo, o TypeScript reclama quando usamos Number e String para definir tipos porque essa não é a função deles, sua função é principalmente converter tipos como função e armazenar tipos primitivos como classe wrapper, number e string que são tipos primitivos e portanto eles que devem ser usados para declarar o tipo de uma variável. Espero ter ajudado!

Muito obrigado, entendi perfeitamente a diferença entre eles.