O TypeScript é uma linguagem de programação criada pela Microsoft que expande o JavaScript, oferecendo tipagem estática e outros recursos modernos. Se você está começando a programar e já ouviu falar sobre JavaScript, provavelmente encontrará TypeScript em algum momento.
Ele é amplamente utilizado em grandes projetos, pois ajuda a evitar erros comuns que podem passar despercebidos em JavaScript. Neste artigo, vamos explorar o que é o TypeScript, como ele funciona e como você pode integrá-lo ao NestJS, um framework popular para construção de aplicações escaláveis.
O que é TypeScript?
TypeScript é um superset de JavaScript. Isso significa que qualquer código JavaScript é código TypeScript válido, mas com TypeScript, você pode adicionar tipos explícitos às suas variáveis, funções e objetos. A tipagem estática facilita a detecção de erros durante o desenvolvimento, antes mesmo de executar o código.
Por que usar TypeScript?
- Evitar erros: Com a tipagem estática, você detecta muitos problemas antes de rodar a aplicação.
- Melhorar a legibilidade: A tipagem ajuda a documentar o código.
- Manutenção facilitada: Projetos grandes se tornam mais fáceis de manter.
- Ferramentas de desenvolvimento melhores: O TypeScript oferece integração poderosa com editores de texto, permitindo autocompletar, dicas de tipos e navegação mais simples pelo código.
Configurando TypeScript
O primeiro passo para usar TypeScript é configurá-lo no seu ambiente. Caso você esteja em um projeto Node.js, o processo é simples.
- Instale o TypeScript:
npm install typescript --save-dev
- Crie o arquivo
tsconfig.json
: Esse arquivo é o coração da configuração do TypeScript.
{
"compilerOptions": {
"target": "ES6",
"module": "commonjs",
"strict": true,
"esModuleInterop": true
},
"exclude": ["node_modules"]
}
O comando tsc
(TypeScript Compiler) será usado para compilar seu código TypeScript em JavaScript, que pode ser executado pelo navegador ou servidor.
Principais Conceitos de TypeScript para Iniciantes
Tipagem Explícita
Em JavaScript, você pode criar variáveis sem especificar o tipo:
let nome = "Maria";
No TypeScript, você pode (e deve) declarar o tipo:
let nome: string = "Maria";
Isso ajuda a evitar erros como tentar somar um número com uma string, algo que passaria despercebido em JavaScript:
let idade: number = 25;
let resultado = nome + idade; // Erro detectado no momento da escrita
Interfaces
As interfaces são um dos recursos mais poderosos do TypeScript. Elas permitem definir o formato de um objeto, garantindo que ele contenha certas propriedades e tipos.
interface Pessoa {
nome: string;
idade: number;
}
let usuario: Pessoa = { nome: "Carlos", idade: 30 };
Dessa forma, ao tentar adicionar uma propriedade que não existe ou usar o tipo errado, o TypeScript gerará um erro.
Funções com Tipos
Outro ponto forte do TypeScript é a tipagem em funções. Você pode definir o tipo de entrada e o tipo de retorno de uma função.
function soma(a: number, b: number): number {
return a + b;
}
Se você tentar passar algo diferente de um número, o TypeScript o alertará.
Classes
TypeScript também aprimora o suporte para classes, tornando mais fácil trabalhar com programação orientada a objetos.
class Animal {
nome: string;
constructor(nome: string) {
this.nome = nome;
}
emitirSom(): void {
console.log(this.nome + " está fazendo um som.");
}
}
let cachorro = new Animal("Rex");
cachorro.emitirSom();
Exemplos com NestJS e TypeScript
O NestJS é um framework Node.js para a construção de aplicativos escaláveis, que utiliza TypeScript por padrão. Ele se baseia em módulos, controladores e serviços para organizar o código de maneira eficiente.
Criando um Projeto NestJS com TypeScript
- Instale o CLI do NestJS:
npm i -g @nestjs/cli
- Crie um novo projeto:
nest new meu-projeto
O NestJS já vem configurado para usar TypeScript. Todo o código que você escreve estará em arquivos .ts
, e o NestJS cuidará da compilação e execução.
Criando um Controlador com TypeScript no NestJS
Um controlador no NestJS é responsável por lidar com as rotas de uma aplicação. Vamos criar um simples controlador para lidar com requisições HTTP.
import { Controller, Get } from '@nestjs/common';
@Controller('usuarios')
export class UsuarioController {
@Get()
listarUsuarios(): string {
return 'Lista de usuários';
}
}
Criando um Serviço no NestJS
Um serviço é usado para organizar a lógica de negócios de forma modular e reutilizável.
import { Injectable } from '@nestjs/common';
@Injectable()
export class UsuarioService {
obterUsuarios(): string[] {
return ['Carlos', 'Maria', 'João'];
}
}
Integrando Controlador e Serviço
No NestJS, é fácil injetar um serviço em um controlador:
import { Controller, Get } from '@nestjs/common';
import { UsuarioService } from './usuario.service';
@Controller('usuarios')
export class UsuarioController {
constructor(private readonly usuarioService: UsuarioService) {}
@Get()
listarUsuarios(): string[] {
return this.usuarioService.obterUsuarios();
}
}
Aqui, o controlador usa o serviço UsuarioService
para retornar uma lista de usuários.
Tipos mais Populares em TypeScript
O TypeScript oferece uma variedade de tipos que ajudam a escrever códigos mais robustos e menos propensos a erros. Vamos explorar os tipos mais populares e amplamente utilizados:
1. string
(Cadeia de Caracteres)
O tipo string
é usado para representar textos. Ele permite que variáveis sejam atribuídas a qualquer valor textual.
let saudacao: string = "Olá, mundo!";
2. number
(Números)
O tipo number
é utilizado para números, sejam eles inteiros ou de ponto flutuante.
let idade: number = 25;
let altura: number = 1.75;
3. boolean
(Valores Booleanos)
O tipo boolean
representa dois valores: true
ou false
. Esse tipo é muito útil em condições lógicas.
let ativo: boolean = true;
4. array
(Arrays)
Arrays são coleções de elementos, e em TypeScript você pode tipar tanto o conteúdo do array quanto sua estrutura.
let listaDeNumeros: number[] = [1, 2, 3, 4];
Outra maneira de definir arrays é usando a sintaxe genérica:
let listaDePalavras: Array<string> = ["casa", "carro", "árvore"];
5. any
(Qualquer Tipo)
O tipo any
permite que uma variável tenha qualquer tipo de valor. Embora poderoso, ele deve ser usado com cautela, pois pode anular as vantagens da tipagem estática.
let valor: any = 42;
valor = "agora é uma string";
6. void
(Sem Retorno)
O tipo void
geralmente é usado em funções que não retornam nenhum valor.
function exibirMensagem(): void {
console.log("Essa função não retorna nada.");
}
7. null
e undefined
Esses tipos são utilizados para representar a ausência de valor. Por padrão, ambos podem ser atribuídos a variáveis de qualquer tipo, a menos que você ative o modo strictNullChecks
.
let vazio: null = null;
let indefinido: undefined = undefined;
8. object
(Objetos)
O tipo object
representa qualquer valor que não seja number
, string
, boolean
, symbol
, null
ou undefined
. Você pode criar objetos complexos com diversas propriedades.
let pessoa: { nome: string; idade: number } = {
nome: "Carlos",
idade: 30,
};
9. union types
(Tipos de União)
Os union types permitem que uma variável tenha mais de um tipo. Isso é útil em casos onde uma variável pode assumir diferentes formas.
let resultado: number | string;
resultado = 100;
resultado = "Cem";
10. enum
(Enumerações)
Enums permitem definir um conjunto de valores nomeados para facilitar o uso de constantes.
enum Direcoes {
Norte,
Sul,
Leste,
Oeste,
}
let direcaoAtual: Direcoes = Direcoes.Norte;
11. tuple
(Tuplas)
Tuplas permitem declarar arrays onde o tipo de cada elemento é conhecido e pode ser diferente.
let pessoa: [string, number] = ["Maria", 25];
Conclusão
O TypeScript é uma ferramenta indispensável para quem deseja desenvolver aplicações robustas e escaláveis em JavaScript. A tipagem estática, interfaces, e a melhora na clareza do código tornam projetos grandes muito mais gerenciáveis. No caso do NestJS, o TypeScript já é parte integrante da arquitetura, facilitando o desenvolvimento de APIs e serviços.
Se você ainda não experimentou TypeScript, este é o momento. Ao integrar com frameworks como o NestJS, você vai perceber a diferença na qualidade e organização do seu código.
Agora é com você!
Gostou do artigo? Já utilizou TypeScript ou pretende começar a usar? Deixe seu comentário abaixo, compartilhe suas experiências e sugestões. Queremos saber como TypeScript pode te ajudar na sua jornada como programador!