TypeScript e arquivos: do iniciante ao profissional em 15 minutos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Por que trabalhar com arquivos em TypeScript não é assustador, mas sim conveniente

\n\n

Quando comecei a escrever em TypeScript, a ideia me assustava: "E os arquivos? No navegador é simples, mas aqui — servidor, discos, caminhos...". Mas, como se viu, trabalhar com arquivos e sistema de arquivos em TypeScript é como montar um LEGO: há peças claras (módulos fs e path), há instruções (tipagem), e o resultado é previsível. Sem surpresas, apenas código limpo.

\n\n

Neste artigo, vamos entender como ler, escrever, renomear e excluir arquivos usando o moderno TypeScript para Node.js. Você aprenderá por que usar fs/promises em vez do antigo fs, como não se perder nos caminhos e como tratar erros de forma elegante. Vamos lá!

\n\n

Preparação: o que você precisa saber antes de começar

\n\n

Antes de mergulhar no código, certifique-se de ter o Node.js instalado (versão 14+ — já tem promises nativas). Crie também um projeto simples:

\n\n
mkdir ts-files-demo\ncd ts-files-demo\nnpm init -y\nnpm install typescript @types/node --save-dev\nnpx tsc --init
\n\n

No arquivo tsconfig.json, certifique-se de ativar "module": "NodeNext" ou "ESNext" e "target": "ES2022". Agora você está pronto para trabalhar com o sistema de arquivos TypeScript.

\n\n

Importações que sempre serão úteis

\n\n

A maneira mais correta de importar módulos para trabalhar com arquivos hoje é:

\n\n
import { readFile, writeFile, unlink, mkdir, access } from 'fs/promises';\nimport { join, dirname, basename, extname } from 'path';\nimport { fileURLToPath } from 'url';
\n\n

Observe: não usamos fs com callbacks. Apenas fs/promises — este é o padrão moderno, que combina perfeitamente com async/await e a tipagem do TypeScript.

\n\n

Leitura de arquivo: do simples ao seguro

\n\n

Vamos começar com o clássico — ler um arquivo de texto. Suponha que temos um data.txt com algum conteúdo.

\n\n
import { readFile } from 'fs/promises';\n\nasync function readTextFile(filePath: string): Promise<string> {\n  try {\n    const content = await readFile(filePath, 'utf-8');\n    return content;\n  } catch (error) {\n    console.error('Erro ao ler o arquivo:', error);\n    throw error;\n  }\n}\n\n// Uso\nconst data = await readTextFile('./data.txt');\nconsole.log(data);
\n\n

Simples, certo? Mas em projetos reais, frequentemente trabalhamos com JSON. Vamos criar uma função genérica com genérico:

\n\n
import { readFile } from 'fs/promises';\n\nasync function readJsonFile<T>(filePath: string): Promise<T> {\n  const raw = await readFile(filePath, 'utf-8');\n  return JSON.parse(raw) as T;\n}\n\n// Exemplo: lendo uma configuração\ninterface Config {\n  port: number;\n  dbUrl: string;\n}\n\nconst config = await readJsonFile<Config>('./config.json');\nconsole.log(config.port); // tipo number — o TypeScript sugere automaticamente
\n\n

Isso é trabalhar com arquivos TypeScript da melhor forma: a tipagem protege você de erros bobos, e o código permanece legível.

\n\n

Escrita em arquivo: criando e atualizando dados

\n\n

Agora vamos aprender a salvar informações. A função writeFile sobrescreve o arquivo se ele existir, ou cria um novo.

\n\n
import { writeFile, mkdir } from 'fs/promises';\nimport { dirname } from 'path';\n\nasync function saveToFile(filePath: string, data: string): Promise<void> {\n  // Primeiro, garantimos que a pasta existe\n  const dir = dirname(filePath);\n  await mkdir(dir, { recursive: true });\n\n  // Agora escrevemos\n  await writeFile(filePath, data, 'utf-8');\n  console.log(`Arquivo ${filePath} salvo com sucesso`);\n}\n\n// Salvando um objeto como JSON\nconst user = { name: 'Ana', age: 28, role: 'admin' };\n                

Blogs

Book Recommendations