Sobes.tech
Назад к вопросам
Senior
6

Можно ли доверять TypeScript-типам в runtime? Как обеспечить валидацию данных от бэкенда?

Компании, где спрашивали
АЛМИ Партнер

Ответ от нейросети

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-валидация гарантирует корректность данных во время выполнения.