javascript - Hvordan definere typen for en null-verdi med skjema fra Zod
Jeg har en type definert med zod.
Jeg er uerfaren med TypeScript.
Zod-objektet ser slik ut:
import z from 'zod';
const clientSchema = z.object({
name: z.string(),
details: z.object({
detail1: z.string().optional()
}
}
);
export type ClientSchema = z.infer<typeof clientSchema>;
Tildele details til en client av typen ClientSchema, håpet jeg å kunne annotere typen slik:
const details = {
detail1: <string|null|undefined> ''
}
Men TypeScript klager:
Typer av eiendom 'detail1' er inkompatible. Type 'string | undefined' kan ikke tilordnes typen 'string'. Type 'undefined' kan ikke tilordnes typen 'string'.
Så nå har jeg laget et eget skjema for detaljer:
export const detailSchema = z.object({
detail1: z.string().optional() ,
});
export type DetailSchema = z.infer<typeof detailSchema>;
Og deretter deklarer objektet:
const details: DetailSchema = {
detail1: 'a string'
}
Er det den forventede/anbefalte tilnærmingen for underobjekter?
Svar #1
Du kan også ha nullable-objekter, hvis du ønsker at en egenskap skal være null eller undefined, kan du gjøre
property: z.string().nullable().optional(), i ditt tilfelle vil dette være:
const clientSchema = z.object({
name: z.string(),
details: z.object({
detail1: z.string().nullable().optional()
})
});
Som burde gi deg
type ClientSchema = {
name: string;
details: {
detail1?: string | null | undefined;
};
}
Fra dette kan du ekstrapolere detaljer-skjemaet som
type DetailSchema = ClientSchema["details"];som vil gi deg
type DetailSchema = {
detail1?: string | null | undefined;
}
Som du kan bruke som følger:
const details: DetailsSchema = {
details1: "" // string | null | undefined
}
