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.
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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.
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 NumberNesse ú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 newSe 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.