Back to questions
Senior
5
Можно ли доверять TypeScript-типам в runtime? Как обеспечить валидацию данных от бэкенда?
Companies where asked
АЛМИ Партнер
Answer from AI
sobes.tech AI
TypeScript-типам нельзя полностью доверять в runtime, так как они существуют только на этапе компиляции и не влияют на выполнение кода. После компиляции в JavaScript типы отсутствуют.
Чтобы обеспечить валидацию данных, полученных от бэкенда, нужно использовать runtime-валидацию. Для этого применяют:
- Библиотеки для схемной валидации, например
zod,io-ts,yup. Они позволяют описать структуру данных и проверить её в runtime. - Явную проверку полей и типов вручную.
Пример с zod:
import { z } from "zod";
const UserSchema = z.object({
id: z.number(),
name: z.string(),
email: z.string().email(),
});
type User = z.infer<typeof UserSchema>;
async function fetchUser(): Promise<User | null> {
const response = await fetch('/api/user');
const data = await response.json();
const result = UserSchema.safeParse(data);
if (!result.success) {
console.error('Invalid data', result.error);
return null;
}
return result.data;
}
Таким образом, TypeScript помогает на этапе разработки, а runtime-валидация гарантирует корректность данных во время выполнения.