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.