1. Prisma or TypeORM
TypeScript supports modern ORMs like Prisma and TypeORM, which provide type-safe database access.
Prisma Setup
npm install @prisma/client
npm install --save-dev prisma
npx prisma init
Define your schema in prisma/schema.prisma:
model User {
id Int @id @default(autoincrement())
name String
email String @unique
}
Generate Prisma client:
TypeORM Setup
npm install typeorm reflect-metadata pg
Define an entity:
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column({ unique: true })
email: string;
}
Both Prisma and TypeORM provide type-safe models and queries.
2. Model Typing
Type-safe models allow TypeScript to infer correct types for database records.
Prisma Example
import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient();
async function createUser() {
const user = await prisma.user.create({
data: { name: "Muni", email: "muni@example.com" },
});
console.log(user.id, user.name);
}
TypeORM Example
import { getRepository } from "typeorm";
import { User } from "./entities/User";
const userRepository = getRepository(User);
const newUser = userRepository.create({ name: "Muni", email: "muni@example.com" });
await userRepository.save(newUser);
console.log(newUser.id, newUser.name);
Model typing ensures correct property usage and reduces runtime errors.
3. Type-Safe Queries
Both ORMs provide type-safe queries that leverage TypeScript types for database operations.
Prisma Queries
// Find a user by email
const user = await prisma.user.findUnique({
where: { email: "muni@example.com" },
});
// Update a user
const updatedUser = await prisma.user.update({
where: { id: 1 },
data: { name: "Updated Muni" },
});
TypeORM Queries
const user = await userRepository.findOne({ where: { email: "muni@example.com" } });
await userRepository.update({ id: 1 }, { name: "Updated Muni" });
Type-safe queries prevent invalid field access and improve developer confidence during database operations.
Conclusion
Integrating databases with TypeScript using Prisma or TypeORM provides type-safe models and queries. Proper model typing and type-safe database operations enhance reliability, reduce runtime errors, and make application development more maintainable.