TypeScript Models and Interfaces
When to use this skill
- •When defining the data structure for a new Appwrite collection.
- •When creating props for components that data-fetch.
- •To avoid using
anyacross the codebase.
Workflow
- • Export interfaces from a central
types/directory. - • Include standard Appwrite fields (
$id,$createdAt,$updatedAt,$permissions). - • Use Enums for fields with fixed values (e.g.,
BookingStatus).
Example Template
typescript
import { Models } from 'appwrite';
export interface Tour extends Models.Document {
title: string;
description: string;
price: number;
location: string;
images: string[];
rating: number;
availableDates: string[]; // ISO Strings
}
export type BookingStatus = 'pending' | 'confirmed' | 'cancelled';
export interface Booking extends Models.Document {
userId: string;
tourId: string;
status: BookingStatus;
totalPrice: number;
}
Instructions
- •Generics: Use these interfaces with Appwrite SDK methods:
databases.listDocuments<Tour>(...). - •Readonly: Mark fields as
readonlyif they shouldn't be mutated by the frontend.