Web Development TypeScript Subjective
Oct 04, 2025

How do you create a type that validates API response schemas?

Detailed Explanation
Use conditional types to validate response structure, mapped types for field validation, and recursive types for nested object validation. Basic Response Validation: type APIResponse = { success: boolean; data: T; error?: string; }; type ValidateResponse = { [K in keyof Schema]: K extends keyof T ? T[K] extends Schema[K] ? T[K] : never : never; }; // Define expected schema type UserSchema = { id: number; name: string; email: string; }; function validateUserResponse( response: T ): ValidateResponse> { // Runtime validation logic here return response as ValidateResponse>; } Advanced Nested Validation: type DeepValidate = { [K in keyof Schema]: K extends keyof T ? Schema[K] extends object ? T[K] extends object ? DeepValidate : never : T[K] extends Schema[K] ? T[K] : never : never; }; type NestedUserSchema = { user: { id: number; profile: { name: string; settings: { theme: string; notifications: boolean; }; }; }; }; function validateNestedResponse( response: T ): DeepValidate { // Deep validation logic return response as DeepValidate; } Array Response Validation: type ArrayResponse = { items: T[]; total: number; page: number; }; type ValidateArrayResponse = { items: ValidateResponse[]; total: number; page: number; }; function validateArrayResponse( response: ArrayResponse ): ValidateArrayResponse { // Array validation logic return response as ValidateArrayResponse; } Runtime Integration: function createValidator(schema: Schema) { return function validate(data: T): ValidateResponse { // Runtime validation using schema // Could integrate with libraries like Joi, Yup, or Zod return data as ValidateResponse; }; } const userValidator = createValidator({ id: 'number', name: 'string', email: 'string' }); // Usage const apiResponse = await fetch('/api/user/123'); const jsonData = await apiResponse.json(); const validatedUser = userValidator(jsonData); Benefits: • Compile-time validation of API response structure • Type-safe data access after validation • Prevents runtime errors from invalid data • Integrates well with runtime validation libraries.
Discussion (0)

No comments yet. Be the first to share your thoughts!

Share Your Thoughts
Feedback