スキーマから型定義を生成する
ご存知の通り、Zodではz.infer<T>
でスキーマから型定義を生成できます。
const StudentSchema = z.object({ name: z.string(), age: z.number() });
type StudentType = z.infer<typeof StudentSchema>;
// StudentType = { name: string; age: number; }
Genericsで渡したスキーマから型定義を生成する
スキーマをGenericsで渡して、渡したスキーマから型定義を生成したい場合、Genericsの型にextends ZodTypeAnyの制約を加えてあげればOKです。
const validate = <TSchema extends ZodTypeAny>(input: unknown, schema: TSchema): z.infer<TSchema> =>
{
return schema.parse(input);
}
const StudentSchema = z.object({ name: z.string(), age: z.number() });
const student = validate({ name: 'foo', age: 18}, StudentSchema);
// typeof student = { name: string; age: number; }
参考