TypeScript Types
Common types and interfaces in Velist.
Database Schema
DatabaseSchema Interface
typescript
// src/features/_core/database/connection.ts
export interface DatabaseSchema {
users: {
id: string
email: string
password_hash: string
name: string
role: string
email_verified_at: string | null
created_at: string
updated_at: string
}
sessions: {
id: string
user_id: string
ip_address: string
user_agent: string
payload: string
last_activity: number
}
password_reset_tokens: {
email: string
token: string
created_at: string
}
}User Types
User Interface
typescript
interface User {
id: string
email: string
name: string
role: 'admin' | 'user'
created_at: string
}Auth Context
typescript
interface AuthContext {
user: User
session: Session
}Page Props
Base Page Props
typescript
interface PageProps {
errors: Record<string, string>
flash?: {
success?: string
error?: string
}
}With Auth
typescript
interface AuthenticatedPageProps extends PageProps {
user: User
}Inertia Types
Inertia Render
typescript
interface Inertia {
render: (component: string, props?: Record<string, any>) => Response
redirect: (url: string) => Response
}Inertia Page
typescript
interface InertiaPage<T = Record<string, any>> {
component: string
props: T
url: string
version: string
}Service Types
Repository Pattern
typescript
interface Repository<T> {
findAll(): Promise<T[]>
findById(id: string): Promise<T | undefined>
create(data: Partial<T>): Promise<T>
update(id: string, data: Partial<T>): Promise<T>
delete(id: string): Promise<void>
}Service Layer
typescript
interface Service<T, CreateDTO, UpdateDTO> {
getAll(): Promise<T[]>
getById(id: string): Promise<T | undefined>
create(payload: CreateDTO): Promise<T>
update(id: string, payload: UpdateDTO): Promise<T>
delete(id: string): Promise<void>
}Elysia Context
Context with Inertia
typescript
import { Context } from 'elysia'
interface ContextWithInertia extends Context {
inertia: Inertia
}Context with Auth
typescript
interface ContextWithAuth extends Context {
user: User
session: Session
}Form Types
UseForm
typescript
interface UseForm<T> {
data: T
errors: Record<string, string>
processing: boolean
isDirty: boolean
post(url: string): void
put(url: string): void
patch(url: string): void
delete(url: string): void
}Utility Types
Nullable
typescript
type Nullable<T> = T | nullOptional
typescript
type Optional<T> = T | undefinedUUID
typescript
type UUID = string // UUID v7 formatISO8601
typescript
type ISO8601 = string // ISO 8601 date string