ZodのSchemaがoptionalではないのにoptionalになった件
タイトルの通りです。1日これで詰まってたので供養するために書きます.
発生した問題
以下のようなコードを書いたときに、全てのフィールドがoptional(string | undefinedなど)になってしまう問題が発生しました。
export const zodValue: z.ZodSchema<Value> = z.discriminatedUnion("type", [
z.object({
type: z.literal("booleanType"),
value: z.boolean(),
}),
z.object({
type: z.literal("stringType"),
value: z.string(),
}),
z.object({
type: z.literal("integerType"),
value: z.string()
}),
z.object({
type: z.literal("floatType"),
value: z.string()
}),
])
type Value = z.infer<typeof zodValue> // {type?: "booleanType", value?: boolean} | {type?: "stringType", value?: string} | ...
解決策
tsconfig.json
のcompilerOptions
のstrict
をtrueにすることで治りました。
Turborepoの他のpackageからtsconfigをextendsするやつをやっていたんですが何故かうまく効いていませんでした...