Trabalhando com Bancos de Dados em TypeScript: PostgreSQL e MongoDB para Iniciantes
TypeScript é uma extensão estritamente tipada do JavaScript que adiciona confiabilidade e previsibilidade ao código. Ao trabalhar com bancos de dados (BD), TypeScript é especialmente útil: você pode definir tipos para entidades, verificar a correção das consultas em tempo de compilação e evitar muitos erros de runtime. Neste artigo, veremos como conectar-se aos dois bancos de dados mais populares — o relacional PostgreSQL e o orientado a documentos MongoDB — e realizar operações básicas com dados. O material é voltado para desenvolvedores iniciantes familiarizados com os fundamentos do TypeScript.
Preparação do Ambiente e Instalação de Dependências
Antes de escrever código, é necessário configurar o projeto. Crie um novo diretório e inicialize o projeto:
mkdir ts-db-examplecd ts-db-examplenpm init -ynpm install typescript @types/node ts-node --save-devnpx tsc --initAgora, instale as bibliotecas para trabalhar com bancos de dados. Para PostgreSQL, usaremos TypeORM (um ORM popular com bom suporte a TypeScript), e para MongoDB, Mongoose (uma biblioteca para modelagem de esquemas e trabalho com MongoDB).
npm install typeorm reflect-metadata pgnpm install mongooseInstale também os tipos para Node.js e as configurações para TypeORM:
npm install @types/node --save-devNo arquivo tsconfig.json, certifique-se de incluir as opções:
{ "compilerOptions": { "target": "ES2020", "module": "commonjs", "outDir": "./dist", "rootDir": "./src", "strict": true, "esModuleInterop": true, "experimentalDecorators": true, "emitDecoratorMetadata": true }}Agora a estrutura do projeto está pronta. Crie a pasta src e, dentro dela, os arquivos para trabalhar com cada BD.
Trabalhando com PostgreSQL via TypeORM
Configuração da Conexão
TypeORM permite trabalhar com BD através de decoradores e entidades. Vamos criar o arquivo src/postgres.ts e configurar a conexão com o banco de dados PostgreSQL local ts_db:
import "reflect-metadata";import { DataSource } from "typeorm";
export const AppDataSource = new DataSource({ type: "postgres", host: "localhost", port: 5432, username: "postgres", password: "password", database: "ts_db", synchronize: true, // cria tabelas automaticamente (apenas para desenvolvimento) logging: false, entities: ["src/entity/**/*.ts"],});Criação de uma Entidade (Entity)
Uma entidade é uma classe que é mapeada para uma tabela no BD. Vamos criar a pasta src/entity e o arquivo User.ts:
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";
@Entity()export class User { @PrimaryGeneratedColumn() id: number;
@Column({ length: 100 }) name: string;
@Column({ unique: true }) email: string;
@Column({ default: 18 }) age: number;}Executando Operações CRUD
Agora, vamos escrever funções para criar, ler, atualizar e deletar usuários no arquivo src/postgres-crud.ts:
import { AppDataSource } from "./postgres";import { User } from "./entity/User";
async function main() { await AppDataSource.initialize(); const userRepository = AppDataSource.getRepository(User);
// CREATE — criação de um novo usuário const newUser = userRepository.create({ name: "Ivan Petrov", email: "ivan@example.com", age: 25, }); await userRepository.save(newUser); console.log("Usuário criado:", newUser);
// READ — leitura de todos os usuários const allUsers = await userRepository.find(); console.log("Todos os usuários:", allUsers);
// UPDATE — atualização da idade do usuário com id=1 const userToUpdate =
```