TypeScript Models
Location: lib/models/index.ts (inside your module repo)
Define interfaces that mirror your database schema and create input types for mutations.
Interface Definitions
Each major entity should have a corresponding TypeScript interface.
export interface MyItem {
id: string;
userId: string;
title: string;
description?: string;
status: MyStatus;
createdAt: number; // Unix timestamp
updatedAt: number; // Unix timestamp
}
Type Aliases & Input Types
Use Omit and Partial to create type-safe inputs for creation and updates.
export type MyStatus = "pending" | "active" | "completed";
export type CreateItemInput = Omit<MyItem, "id" | "createdAt" | "updatedAt">;
export type UpdateItemInput = Partial<Omit<CreateItemInput, "userId">>;
Best Practices
- Consistency: Field names and types must match the database schema exactly.
- Enums: Define enums as
(typeof Enum)[keyof typeof Enum]. - Timestamps: Always include
createdAtandupdatedAtasnumber.