- Publicar em
Não se perca com TypeScript
- Autor

- Nome
- Kevin Diego
Observações importantes
Este artigo tem finalidades de facilitação para os iniciantes da tecnologia, como eu. Minha ideia é mostrar de um ponto de vista mais simples possível. A ideia deste artigo é abranger desde a instalação até a criação de seus primeiros contratos.
Toda referência deste conteúdo foi baseada na documentação oficial e também nos vídeos da @glauciaLemos, onde ela explica e conta mais detalhes de como usar.
Outro detalhe é que este artigo abordará a parte introdutória, então muitos conceitos ainda serão abordados nos próximos artigos.
Introdução
Desenvolvido pela Microsoft e sendo mantido pela comunidade, TypeScript é o superpoder do JavaScript, onde é usado contratos para descrever alguns elementos de código, criamos uma forma de fechar o cerco e evitar possíveis erros de compilação no desenvolvimento de sistemas.
Aprender e praticar
Oficialmente, você pode acessar a documentação do TypeScript e aprender como fazer o uso deste superset.
Para praticar, acesse o Playground.
Requisitos
Você precisa ter algumas ferramentas já instaladas em sua máquina para poder usufruir deste superset.
Node.js- Ambiente de execução que permite escrever JavaScript na sua máquina.TypeScript- Instalado em sua máquina.VS Code- Editor de código. Obs: Qualquer editor pode ser usado.
tsconfig.json
Por padrão, todo projeto TypeScript precisa deste arquivo para que possamos descrever algumas informações relevantes para o software que foi construído usando TypeScript.
- Usando a propriedade
files
{"compilerOptions": {"module": "commonjs","noImplicitAny": true,"removeComments": true,"preserveConstEnums": true,"sourceMap": true},"files": ["core.ts","sys.ts","types.ts","scanner.ts","parser.ts","utilities.ts","binder.ts","checker.ts","emitter.ts","program.ts","commandLineParser.ts","tsc.ts","diagnosticInformationMap.generated.ts"]}
- Usando as propriedades
includeeexclude
{"compilerOptions": {"module": "system","noImplicitAny": true,"removeComments": true,"preserveConstEnums": true,"outFile": "../../built/local/tsc.js","sourceMap": true},"include": ["src/**/*"],"exclude": ["node_modules", "**/*.spec.ts"]}
Gerar o Tsconfig.json
No terminal, é possível criar um arquivo padrão digitando o comando tsc --init
Aqui podemos informar diversas configurações, desde a versão em que o Ecmascript será compilado até onde iremos gerar os arquivos após a compilação. Para mais detalhes sobre cada chave de configuração, acesse Tsconfig.
Transpilação
É importante lembrar que, por padrão, o browser não reconhece TypeScript, precisamos realizar a transpilação de todo arquivo para JavaScript. Para realizar tal processo, podemos ir no terminal e rodar o seguinte comando: tsc + [nome do arquivo].
Mas isso não é perda de tempo?
Uma coisa que pode estar se perguntando agora é se fazer tudo isso para definir padrões em seu projeto e escrever um pouco mais não seria perda de tempo, visto que se eu me preocupar em passar todos os valores corretos, o código deveria funcionar?
Nesse caso, sim. Mas vale lembrar que os programadores não trabalham sozinhos e eventualmente alguém pode acabar errando na criação de algo e gerando problemas para toda a aplicação. A ideia do TypeScript é que, através do próprio código que você escreve, ele seja à prova de erros seus e de seu time também. Ele não vai deixar você fazer 💩 e nem o Juninho 😂
Type Annotation
Por padrão, o type annotation é onde ajuda o compilador a entender as variáveis e seus valores. Você não é obrigado a usá-lo, mas caso não o use, o uso do TypeScript perde o sentido, já que é exatamente assim que ele entende e te auxilia a captar erros em seu código.
Diferenças do typescript
Usando javascript nativo
let mensagem = 'Hello World, Kevin Diego'console.log(mensagem)
Usando typescript
let mensagem: string = 'Hello World, Kevin Diego'console.log(mensagem)
Como mostrado no exemplo acima, a diferença mais notável para quem já tem um conhecimento prévio de javascript,é que, sempre que formos definir alguma variável ou constante, precisaremos também dizer qual tipo dela. Sendo assim, caso a variável receba um valor diferente do previsto, o TypeScript reclama informando que existe algo incoerente.
Exemplo:
Usando typescript
let mensagem: string = 32console.log(mensagem)
Neste caso, mesmo que você queira, seu sistema não vai funcionar, pois a variável mensagem, que segundo o TypeScript deveria ser do tipo string, recebeu um valor do tipo number, gerando assim um log bem bonito na sua cara.
Lembrando que:
Usando typescript
let mensagem: string = '32'console.log(mensagem)
Caso este número esteja entre aspas, a situação já muda, pois não estamos tratando-o como um valor number.
Outros exemplos:
Arrays
let animais: string[] = ['Elefante', 'Cachorro', 'Gato', 'Panda', 'Girafa', 'Leão']console.log(animais)
Objetos
let carro: {nome: stringano: numberpreco: number}carro = { nome: 'Toyota Yaris Sedan XS', ano: 2019, preco: 80000 }console.log(carro)
Funções
function multiplicarNumero(num1: number, num2: number) {return num1 * num2}console.log(multiplicarNumero(2, 5))
Tipos no typescript
boolean
Tipo primitivo que permite somente dois valores true ou false
exemplos:
let theme: boolean = trueconsole.log(theme)
let concluido: boolean = falseif (!concluido) {console.log('Tarefa foi concluída com sucesso!')} else {console.log('Tarefa Pendente!')}
Vale lembrar que Boolean não é boolean.
Boolean -> é um tipo Object. Recomenda-se que sempre usemos tipos primitivos para declaração de variáveis no TypeScript.
number e bigint
Tipos que representa números e todas suas variáveis
Exemplos:
let num1: number = 23.0let num2: number = 0x78cflet num3: number = 0o577let num4: number = 0b110001console.log('Number - Ponto Flutuante...: ', num1)console.log('Number - Hexadecimal...: ', num2)console.log('Number - Octal...: ', num3)console.log('Number - Binário...: ', num4)
Neste primeiro caso, podemos usar o number para representar números inteiros negativos flutuantes positivos inifinitos ou até mesmo Nan.
let big1: bigint = 9007199254740991nlet big2: bigint = 0b100000000000000000000000000000000000000000000000000011nlet big3: bigint = 0x20000000000003nlet big4: bigint = 0o400000000000000003nconsole.log('Bigint...: ', big1)console.log('Bigint - Binário...: ', big2)console.log('Bigint - Hexadecimal...: ', big3)console.log('Bigint - Octal...: ', big4)
Lançado no typescript em sua versão 3.2 no Ecmascript2020 ou ESNext, permite trabalhar com números inteiros maiores sem ter muitas possibilidades de erros de arredondamento.
string
Assim como no javascript o tipo string serve para armazenar texto, podendo ser delimitado tanto por aspas simples como por aspas duplas. Também existe o objeto String assim como number, mas da mesma forma, precisamos definir os tipos de maneira primitiva.
Exemplos:
let nomeCompleto: string = 'Kevin Sousa'let funcaoEmpresa: string = 'Analista de redes FTTH NOC'console.log(nomeCompleto)console.log(funcaoEmpresa)
let nomeEmpresa: string = 'Alares'let dadosFuncionario: string = `Seja bem-vinda ${nomeCompleto}! Você será ${funcaoEmpresa}na empresa ${nomeEmpresa}`console.log(dadosFuncionario)
array
Basicamente, é uma lista ordenada de dados. Todo array começa com o índice 0 . Para o TypeScript, precisamos definir seu tipo ao inicializar.
Exemplos:
let frutas: string[] = ['🍍', '🍊', '🍎', '🍉', '🥭']let frutas1: Array<string> = ['🍍', '🍊', '🍎', '🍉', '🥭']console.log(frutas[2])console.log(frutas1[3])
Neste exemplo frutas é um array de strings vazio, e frutas1 é um Objeto Array de string.
let idiomas: Array<string> = ['Português', 'Inglês', 'Espanhol', 'Francês']idiomas.push('Mandarim')idiomas.push('Italiano')console.log(idiomas)console.log(idiomas)console.log(idiomas)
Na prática, não há diferença de uso entre o primitivo string[] e o tipo genérico Array. Ambas as declarações são usadas para definir um array de strings em TypeScript.
Ambos os tipos podem ser usados para definir arrays de strings e oferecem as mesmas funcionalidades e métodos de array. A escolha entre os dois formatos é uma questão de preferência pessoal. Algumas pessoas podem preferir a sintaxe mais concisa string[], enquanto outras podem preferir a sintaxe genérica Array. O resultado é o mesmo em ambos os casos.
let listaNumeros = [0, 1, 2, 3, 4, 5];listaNumeros = [...listaNumeros, 6, 7, 8, 9, 10];console.log(listaNumeros);
Neste exemplo, usamos o spread operator para desestruturar a variável e atualizar os valores.
let linguagensArray:string[] = new Array('JavaScript', 'Python', 'PHP', 'C#');function funcaoLinguagens(linguagens:string[]) {for (let i = 0; i < linguagens.length; i++) {console.log(linguagensArray[i]);}}funcaoLinguagens(linguagensArray);
Com funções com parâmetros, precisamos definir também os valores que serão retornados.
tuple
Tupla é um tipo de armazenamento derivado de arrays que pode conter vários tipos. Com tuplas, é possível:
let pessoa: [string, string, number];let pessoa2: [nome: string, posicao: string, idade: number]pessoa = ['Kevin Sousa', 'Analista de redes', 34];
Note que, ao definir a variável, realizamos sua tipagem conforme a posição dos valores. Podemos também fazer o uso de rótulos na inicialização da variável.
let listaFrutas: [string, ...string[]] = ['🍍', '🍊', '🍎', '🍉', '🥭'];console.log(...listaFrutas);
Neste exemplo, o uso do spread operator também é possível para o uso de tuplas para acessar os valores. A primeira atribuição do string serve para dizer que a tupla é de string, e usando o spread operator, ele assume que os demais valores da tupla também são string, a fim de evitar escrever string para cada tipo.
function listarPessoas(nomes: string[], idades: number[]) {return [...nomes, ...idades];}let resultado = listarPessoas(['Glaucia', 'Jurema'], [34, 68]);console.log(resultado)
Aplicando tuplas com funções e usando o retorno do spread operator, é possível criar uma lista e retornar seus valores sem precisar colocar todos os atributos.
type Nome =| [primeiroNome: string, sobrenome: string]| [primeiroNome: string, nomeMeio: string, sobrenome: string]function criarPessoa(...nome: Nome) {return [...nome];}console.log(criarPessoa('Glaucia', 'Lemos'));console.log(criarPessoa('Glaucia', 'de Souza', 'Lemos'));
Criando um tipo usando uma condição com pipes.
Conclusão
Diferentes formas podem ser realizadas para usar o TypeScript e outras ferramentas nativas do JavaScript para facilitar a escrita.
Este foi um guia introdutório e, em breve, darei continuidade a ele com outros assuntos de TypeScript.