TypeScript strict mode patterns for GlobalConnect stack (Next.js 15 + Supabase + React 19). Utility types, generics, type narrowing, satisfies, and database type patterns.
pnpm gen:typesimport { z } from 'zod'
const usuarioSchema = z.object({
id: z.string().uuid(),
nombre: z.string().min(1),
rol: z.enum(['admin', 'lider', 'miembro'])
})
type Usuario = z.infer<typeof usuarioSchema>
import type { Database } from '@/lib/supabase/types'
type Grupo = Database['public']['Tables']['grupos']['Row']
type GrupoInsert = Database['public']['Tables']['grupos']['Insert']
satisfies for type-safe config objectsconst config = {
pageSize: 20,
debounceMs: 400,
} satisfies Record<string, number>
function usePaginatedData<T extends { id: string }>(
fetcher: (page: number) => Promise<T[]>
) { ... }
type RequestState<T> =
| { status: 'idle' }
| { status: 'loading' }
| { status: 'success'; data: T }
| { status: 'error'; error: string }
function isError(val: unknown): val is { error: string } {
return typeof val === 'object' && val !== null && 'error' in val
}
type ActionResult<T = void> =
| { success: true; data: T }
| { success: false; error: string }
Database['public']['Tables']['x']['Row']satisfies"strict": true in tsconfig)unknown over anyas) without a type guard@ts-ignore — fix the type