#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 (проверьте проблему).