Prisma, TypeORM, Model Typing, and Type-Safe Queries - Textnotes

Prisma, TypeORM, Model Typing, and Type-Safe Queries


Learn how to integrate databases with TypeScript using Prisma or TypeORM. This module explains model typing, type-safe queries, and best practices for building reliable and maintainable database applications

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:


npx prisma generate

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.