Proje: OkulUp · Hub: OkulUp — Conventions
TypeScript Tip Pattern’leri
OpenAPI Generated Types
src/generated/api.ts — backend spec’ten üretilmiş.
import type { paths, components } from '@/generated/api';Kullanım Pattern’leri
// Request body tipi
type LoginRequest = OpenApiRequestBody<'/api/login', 'post'>;
// Response tipi
type LoginResponse = OpenApiResponseBody<'/api/login', 'post', 200>;
// Query params
type UserFilters = OpenApiQueryParams<'/api/users', 'get'>;
// Component schema
type UserResource = components['schemas']['UserResource'];RequireKeys Yardımcı Tipi
// Generated schema'dan bazı alanları zorunlu yap
type User = RequireKeys<UserResource, 'id' | 'name' | 'email'>;API Response Tipleri
ApiResponse<T> // { data: T; message?: string }
PaginatedResponse<T> {
data: T[];
links: { first, last, prev, next }
meta: { current_page, last_page, total, per_page, from, to }
}
PaginationParams // { page?, per_page? }
ApiError // { message, errors? }
ApiErrorResponse // Axios error wrapperDomain Tip Genişletme Pattern’i
// ❌ Direkt OpenAPI schema kullanma
type User = components['schemas']['UserResource']; // nullable alanlar sorun çıkarabilir
// ✅ RequireKeys ile zorunlu alanlar, sonra interface ile genişlet
type UserResource = RequireKeys<
Omit<components['schemas']['UserResource'], 'nullable_field'>,
'id' | 'name'
>;
export interface User extends UserResource {
role_id: number;
nullable_field: string | null; // manuel tip kontrolü
}Barrel Exports
Her domain: src/types/{resource}.types.ts
Tümü: src/types/index.ts’ten export ediliyor.
Related
- file-naming — tip dosyası isimlendirme
- service-layer-pattern — tip kullanımı