TypeScript com Node.js: Guia Completo para Iniciantes

O TypeScript está se consolidando como uma das opções de linguagem de programação mais procuradas por organizações inovadoras.

TypeScript é uma extensão do JavaScript, caracterizada por ser compilada e fortemente tipada, construída sobre a base do JavaScript. Esta linguagem de tipagem estática, desenvolvida e mantida pela Microsoft, suporta os princípios da programação orientada a objetos, assim como seu predecessor, o JavaScript.

Esta linguagem de código aberto encontra aplicações diversas, incluindo a criação de aplicativos web, projetos de larga escala e aplicativos móveis. O TypeScript é adaptável tanto ao desenvolvimento front-end quanto back-end, e ainda oferece uma variedade de frameworks e bibliotecas que simplificam o processo de desenvolvimento e ampliam suas funcionalidades.

Por que optar pelo TypeScript em conjunto com Node.js? Este artigo explorará as razões pelas quais o TypeScript é considerado “superior” ao JavaScript, demonstrará como instalar o TypeScript utilizando Node.js, como configurá-lo e como criar um programa básico combinando TypeScript e Node.js.

TypeScript com Node.js: Vantagens

  • Tipagem estática opcional: Diferente do JavaScript, que possui tipagem dinâmica (o tipo de dados de uma variável é determinado em tempo de execução), o TypeScript oferece tipagem estática opcional. Isso significa que, após declarar uma variável, seu tipo é fixo e ela aceitará somente valores compatíveis.
  • Previsibilidade: O uso do TypeScript garante a consistência dos tipos definidos. Por exemplo, uma variável declarada como booleana não poderá se transformar em uma string no decorrer do programa. Isso assegura que as funções mantenham sua integridade e comportamento.
  • Detecção precoce de erros: O TypeScript é capaz de identificar muitos erros de tipo já durante o desenvolvimento, reduzindo a probabilidade de problemas chegarem à produção. Isso otimiza o tempo gasto pelos engenheiros em testes nas fases posteriores.
  • Compatibilidade com IDEs: O TypeScript integra-se perfeitamente com a maioria dos Ambientes de Desenvolvimento Integrado (IDEs), que oferecem recursos como autocompletar código e realce de sintaxe. Este artigo usará o Visual Studio Code, também um produto da Microsoft.
  • Refatoração facilitada: É possível atualizar ou refatorar um aplicativo TypeScript sem alterar seu comportamento. As ferramentas de navegação e o suporte do IDE facilitam a refatoração do código sem gerar dificuldades adicionais.
  • Aproveitamento de pacotes existentes: Não é necessário começar do zero. O TypeScript permite o uso de pacotes NPM já existentes. A linguagem também conta com uma comunidade ativa que mantém e cria definições de tipo para pacotes populares.

Como Implementar TypeScript com Node.js

Apesar das vantagens que o TypeScript oferece, os navegadores web não conseguem interpretar seu código diretamente. Portanto, o código TypeScript precisa ser transpilado para JavaScript antes de ser executado em navegadores. O código resultante terá funcionalidade idêntica ao código TypeScript original, incluindo funcionalidades extras não disponíveis em JavaScript.

Pré-requisitos

  • Node.js: Node é um ambiente de tempo de execução multiplataforma que permite executar código JavaScript fora de um ambiente de navegador. Para verificar se o Node está instalado, utilize o seguinte comando:

node -v

Caso o Node não esteja instalado, ele pode ser baixado do site oficial. Após a instalação, execute o comando acima novamente para confirmar sua configuração adequada.

  • Um gerenciador de pacotes Node: Você pode usar NPM ou Yarn. O NPM é instalado por padrão junto com o Node.js. Neste artigo, usaremos o NPM. Para verificar a versão do NPM, execute:

npm -v

Instalando TypeScript com Node.js

Passo 1: Criação da pasta do projeto

Começaremos criando uma pasta para o projeto TypeScript. O nome desta pasta pode ser qualquer um de sua preferência. Para criar e acessar a pasta, utilize os seguintes comandos:

mkdir typescript-node

cd typescript-node

Passo 2: Inicialização do projeto

Inicialize seu projeto usando npm com o seguinte comando:

npm init -y

O comando acima gera um arquivo `package.json`. O sinalizador `-y` instrui o npm a usar os valores padrão. O arquivo resultante será algo similar a isso:

{
  "name": "typescript-node",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo "Error: no test specified" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

Configurando TypeScript com Node.js

Passo 1: Instalação do compilador TypeScript

Instale o compilador TypeScript em seu projeto com o comando:

npm install –save-dev typescript

A saída no terminal será algo parecido com:

added 1 package, and audited 2 packages in 26s
found 0 vulnerabilities

Observação: A abordagem acima instala o TypeScript localmente na pasta do projeto. Para instalar o TypeScript globalmente em seu sistema (sem a necessidade de instalá-lo toda vez), use o seguinte comando:

npm install -g typescript

Para verificar se o TypeScript foi instalado, use:

tsc -v

Passo 2: Adição dos tipos de ambiente Node.js para TypeScript

O TypeScript utiliza diversos tipos, como Implícito, Explícito e Ambiente. Os tipos de ambiente são adicionados ao escopo de execução global. Para adicionar Tipos de Ambiente, utilize o seguinte:

npm install @types/node –save-dev

Passo 3: Criação do arquivo `tsconfig.json`

Este é o arquivo de configuração que especifica todas as opções de compilação do TypeScript. Use o comando abaixo, que já inclui algumas opções de compilação pré-definidas:

npx tsc --init --rootDir src --outDir build
--esModuleInterop --resolveJsonModule --lib es6
--module commonjs --allowJs true --noImplicitAny true

Isso irá gerar a seguinte mensagem no terminal:

Um arquivo `tsconfig.json`, com valores padrão e comentários, será gerado.

Arquivo `tsconfig.json`

Configuramos:

  • `rootDir`: Define o diretório onde o TypeScript buscará o código. Neste caso, apontamos para a pasta `/src`, onde o código será escrito.
  • `outDir`: Define onde o código compilado será armazenado. Este código será colocado na pasta `build/`.

Utilizando TypeScript com Node.js

Passo 1: Criação da pasta `src` e do arquivo `index.ts`

Com a configuração básica pronta, podemos criar um aplicativo simples em TypeScript e compilá-lo. A extensão para arquivos TypeScript é `.ts`. Dentro da pasta que criamos anteriormente, utilize os seguintes comandos:

mkdir src

touch src/index.ts

Passo 2: Adição de código ao arquivo TypeScript (`index.ts`)

Você pode começar com algo básico como:

console.log('Olá Mundo!')

Passo 3: Compilação do código TypeScript para JavaScript

Execute este comando:

npx tsc

Verifique a pasta de compilação (`build/index.js`). Um arquivo `index.js` com o seguinte conteúdo deve ter sido gerado:

O código TypeScript foi transformado em JavaScript.

Passo 4: Execução do código JavaScript compilado

Como o código TypeScript não pode ser executado diretamente em navegadores, vamos executar o arquivo `index.js` na pasta `build`. Utilize o comando:

node build/index.js

A saída será:

Passo 5: Configuração da compilação automática do TypeScript para JavaScript

Compilar o código TypeScript manualmente a cada alteração pode ser trabalhoso. Para automatizar esse processo, instale o `ts-node` (executa o código TypeScript diretamente sem esperar a compilação) e o `nodemon` (monitora mudanças no código e reinicia o servidor automaticamente).

Execute o seguinte comando:

npm install --save-dev ts-node nodemon

Edite o arquivo `package.json` e adicione o script:

"scripts": {
   "start": "ts-node ./src/index.ts"
}

Agora, para fins de exemplo, adicione este código no arquivo `index.ts`:

function sum (num1:number, num2:number, num3:number){
    return num1 + num2 +num3;
}
console.log(sum(10,15,30))

Exclua o arquivo `index.js` (`/build/index.js`) e execute `npm start`.

A saída deverá ser:

soma de 3 números

Configurando o Linting do TypeScript com ESLint

Passo 1: Instalação do ESLint

O Linting é útil para manter a consistência do código e detectar erros antes do tempo de execução. Instale o ESLint usando o comando:

npm install --save-dev eslint

Passo 2: Inicialização do ESLint

Inicialize o ESLint com o comando:

npx eslint --init

O processo de inicialização irá guiá-lo por várias etapas. Utilize a seguinte captura de tela como referência:

Ao finalizar o processo, você verá um arquivo chamado `.eslintrc.js` com um conteúdo similar a:

module.exports = {
  env: {
    browser: true,
    es2021: true
  },
  extends: 'standard-with-typescript',
  overrides: [
  ],
  parserOptions: {
    ecmaVersion: 'latest',
    sourceType: 'module'
  },
  rules: {
  }
}

Passo 3: Execução do ESLint

Execute o comando abaixo para verificar e analisar todos os arquivos com extensão `.ts`:

npx eslint . --ext .ts

Passo 4: Atualização do arquivo `package.json`

Adicione um script de lint para realizar a análise automaticamente:

"scripts": {
    "lint": "eslint . --ext .ts",
  },

TypeScript com Node.js: Boas Práticas

  • Mantenha o TypeScript atualizado: Os desenvolvedores do TypeScript estão sempre lançando novas versões. Certifique-se de instalar a versão mais recente em seu projeto para aproveitar novos recursos e correções de bugs.
  • Habilite o modo estrito: Ao ativar o modo estrito no arquivo `tsconfig.json`, você pode detectar erros de programação comuns durante o tempo de compilação, reduzindo o tempo de depuração e aumentando a produtividade.
  • Habilite verificações nulas estritas: Ative as verificações nulas estritas no arquivo `tsconfig.json` para capturar todos os erros relacionados a valores nulos ou indefinidos em tempo de compilação.
  • Utilize um editor de código com suporte ao TypeScript: Existem diversos editores de código disponíveis. Utilize um editor como VS Code, Sublime Text ou Atom que ofereça suporte ao TypeScript através de plugins.
  • Use tipos e interfaces: Ao utilizar tipos e interfaces, você pode definir tipos personalizados que podem ser reutilizados em todo o projeto. Isso torna seu código mais modular e fácil de manter.

Conclusão

Agora você possui a estrutura básica de um aplicativo criado com TypeScript em Node.js. Você pode utilizar os pacotes regulares do Node.js, mas escrever seu código em TypeScript e aproveitar todas as funcionalidades adicionais que ele oferece.

Se você está começando com TypeScript, certifique-se de entender bem as diferenças entre TypeScript e JavaScript.