1. Walidacja na poziomie typów
TypeScript pozwala na weryfikację struktur danych już na etapie kompilacji dzięki systemowi typów. Możemy zdefiniować interfejsy i typy, które pomagają w sprawdzeniu poprawności danych przed ich użyciem.
interface User {
name: string;
age: number;
}
const validateUser = (user: User) => {
return typeof user.name === 'string' && typeof user.age === 'number';
};
Jednak walidacja na poziomie typów działa tylko w czasie kompilacji i nie zapobiega błędom podczas wykonywania kodu, zwłaszcza gdy dane pochodzą z zewnętrznych źródeł.
2. Walidacja za pomocą operatora in i typeof
W TypeScript można używać operatora in oraz typeof, aby dynamicznie sprawdzać właściwości obiektów:
const isValidUser = (user: any): user is User => {
return 'name' in user && 'age' in user && typeof user.name === 'string' && typeof user.age === 'number';
};
Ta metoda pozwala na walidację danych w czasie wykonania, ale może być uciążliwa do zarządzania przy bardziej złożonych strukturach danych.
3. Walidacja z wykorzystaniem zod
Biblioteka zod to jedno z najlepszych narzędzi do walidacji w TypeScript. Pozwala na definiowanie schematów oraz ich używanie do sprawdzania poprawności danych:
import { z } from 'zod';
const UserSchema = z.object({
name: z.string(),
age: z.number().min(18),
});
const validateUser = (user: unknown) => {
const result = UserSchema.safeParse(user);
return result.success ? result.data : result.error;
};
zod pozwala na łatwe definiowanie walidacji, obsługę błędów i zapewnienie spójności danych w całej aplikacji.
4. Walidacja za pomocą yup
Inną popularną biblioteką jest yup, która działa w podobny sposób:
import * as yup from 'yup';
const userSchema = yup.object({
name: yup.string().required(),
age: yup.number().min(18).required(),
});
const validateUser = async (user: any) => {
try {
await userSchema.validate(user);
return true;
} catch (error) {
return error;
}
};
yup jest często wykorzystywany w aplikacjach Reactowych do walidacji formularzy.
5. Podsumowanie
Walidacja danych w TypeScript może być realizowana na różne sposoby – od podstawowych metod wbudowanych po zaawansowane biblioteki takie jak zod czy yup. Wybór odpowiedniego rozwiązania zależy od skali projektu i potrzeb walidacyjnych.
Warto pamiętać, że w większości aplikacji najlepszym podejściem jest łączenie różnych metod, np. walidacji statycznej przez TypeScript z dynamiczną walidacją danych wejściowych przy pomocy dedykowanych bibliotek.
Masz swoje ulubione narzędzie do walidacji w TypeScript? Podziel się w komentarzu!


