Проверка данных во время выполнения для TypeScript

#typescript #validation

#typescript #проверка

Вопрос:

В TypeScript нет проверки во время выполнения, чтобы убедиться, что загруженные данные соответствуют типам. В настоящее время мы используем схемы JSON, которые мы генерируем из наших типов с typescript-json-schema помощью CLI, а затем проверяем во время выполнения ajv . Мы думали, что это отличное решение, пока не обнаружили, что оно плохо работает с датами JS, поскольку даты не являются частью JSON.

У кого-нибудь есть решение для этого? Мы используем типы, а не классы.

Ответ №1:

Вы можете использовать библиотеку zod. Вам понадобится только одна схема, и вы можете использовать ее для генерации типов и проверки данных с использованием схемы JSON.

Zod — это библиотека объявления и проверки схемы на основе TypeScript. Я использую термин «схема» для широкого обозначения любого типа / структуры данных, от простой строки до сложного вложенного объекта.

Взгляните на этот пример:

 import * as z from 'zod'

const schema = z.object({
    stringValue: z.string(),
    numberValue: z.number(),
    dateValue: z.date()
})

type MyType = z.infer<typeof schema>
// type MyType = {
//     stringValue: string;
//     numberValue: number;
//     dateValue: Date;
// }

const data = schema.parse({
    stringValue: 'Hello',
    numberValue: 1,
    dateValue: new Date()
})
 

Самая большая проблема с этой библиотекой заключается в том, что она плохо работает, когда вам нужно преобразовать данные (например, вы получаете дату в виде строки). У него есть открытая проблема, касающаяся преобразования данных. Кроме того, вы не можете сгенерировать схему JSON из экземпляра zod (проверьте проблему).