Executando verificação de segurança...
4

Como configurar TypeScript em um projeto Node.js

Esse tutorial está usando a versão 18.16.0 do Node.js

Primeiro eu criei uma pasta chamada typescript.
Na pasta iniciei o projeto node rodando o comando abaixo passando o argumento -y para pular o menu interativo que pergunta o nome do pacote, versão, ... etc

npm init -y

Criei uma pasta src para colocar meu código typescript

mkdir src

Criei 2 arquivos .ts dentro da pasta src, um main.ts e outro Person.ts

touch src/main.ts src/Person.ts

A estrutura ficou assim até o momento:

No arquivo Person.ts criei uma classe simples e no arquivo main.ts importei a classe e criei um objeto dela e printei no console.log

Se tentarmos rodar o arquivo main.ts ele irá dar erro

Porém esse erro que deu ainda não é sobre o typescript, mas sim sobre o uso de importação em modulo que utilizamos.
Por padrão o node usa o tipo de importação e exportação o "commonjs" que tem a sintaxe:

const Person = require('./Person')

Para mudarmos a importação para module, devemos ir no package.json e adicionar uma linha "type" e colocar como module, repare que no print a baixo ele já avisa que o "Default value" é o commonjs

Mudando para "module" e rodando o arquivo main.ts novamente, agora sim o erro é que o node não reconhece o arquivo .ts

Para conseguirmos rodar o TypeScript preciamos de instalar um pacote chamado typescript, para isso rode o comando abaixo:

npm install typescript

Após instalarmos o pacote devemos rodar o seguinte comando para criar um arquivo de configuração do typescript

npx tsc --init

Feito isso ele deverá ter criado o arquivo tsconfig.json

Agora temos 2 formas de conseguir rodar o nosso código typescript

1 - Se digitarmos o comando:

npx tsc

O comando npx tsc transpila todo arquivo .ts para um arquivo .js

Dessa forma conseguimos rodar o arquivo main.js que foi transpilado

Só que dessa forma o código ficará muito bagunçado.
Esclua o 2 arquivos .js gerado e vá para o arquivo tsconfig.json que iremos fazer uma mudança.

No arquivo tsconfig.json descomente a linha que se refere ao outDir e coloque o caminho ./dist

Após fazer isso e rodar novamente o comando

npx tsc

O código .js que foi transpilado irá ser gerado separadamente dentro da pasta dist, não mais misturando com o código presente na pasta src/

Agora que aprendemos transpilar o código typescript e rodar o código podemos criar um script no package.json para facilitar esse projeto.
Crie um script

"start": "tsc && node dist/main.js"

Onde ele irá transpilar todo código .ts para js e depois rodar o o arquivo main.js dento da pasta dist

Feito isso se a gente digitar no terminal

npm run start

Ele irá rodar o script de transpilação e já rodar o nosso código

Para agilizar o nosso desenvolvimento existe uma outra biblioteca que é muito mais fácil de usar para o dia a dia.
Para isso instale o pacote:

npm install ts-node

Após o ts-node instalado para conseguir rodar o código .ts é só digitar no terminar

npx ts-node src/main.ts

O ts-node transpila o código para javascript em tempo de execução e já roda sem precisar fazer nada:

Uma outra vantagem de ter o ts-node instalado é que caso você ter a biblioteca nodemon instalada ela também vai rodar o arquivo .ts sem esforço

Vamos testar, primeiro instale o nodemon

npm install nodemon

Depois execute o código utilizando o nodemon

npx nodemon src/main.ts

Também funcionou, lembrando que o nodemon para arquivo .ts só funciona se você também tiver a biblioteca ts-node instalada.

Ficarei muito feliz se esse post tenha ajudado você de alguma forma, deixo meu muito obrigado se chegou até aqui.
Tem alguma dica, pergunta ou feedback ? Deixe nos comentários

Carregando publicação patrocinada...
1
1
1
1

Pra complementar, eu sugiro usar o Prettier.

  1. Instala a extensão no VS Code chamada Prettier - Code formatter
  2. Crie um arquivo ".prettierrc.json" dentro da pasta raíz do seu projeto
  3. Insira as informações:
{
  "endOfLine": "lf",
  "singleQuote": true,
  "bracketSpacing": true,
  "semi": false,
  "trailingComma": "none",
  "arrowParens": "always",
  "tabWidth": 4
}
1
1
1
1
1
1

Eu ia até comentar por aqui sobre o tsx. É uma lib muito boa para o desenvolvimento, que a gente não precisa ficar se preocupando em ver dois arquivos iguais, um em JavaScript e outro em TypeScript, ele faz tudo por debaixo dos panos, muito massa!