Comments (2)
I installed zod-to-ts to diagnose the problem.
Actually, having used coerce
for the boolean, every missing property is mapped as a boolean false. and the ts types are all optionals (there is a ?
added after the field name in every coerced field)
We resolved using discriminatedUnion
, thanks for the tip!
I kindly suggest to add a tip in the documentation about this behaviour.
from zod.
Hi! Not totally sure what is causing the problem with the union type, but I think a discriminated union might work instead, e.g.:
const hammamAlarmEventFieldDataPayloadSchema = z.object({
type: z.literal("hamman"),
BoilerFullTooSoon: z.coerce.boolean(),
EvLoad: z.coerce.boolean(),
EvDrain: z.coerce.boolean(),
VinBus: z.coerce.boolean(),
Ntc: z.coerce.boolean(),
Fan: z.coerce.boolean(),
Slave: z.coerce.boolean(),
HeaterFail: z.coerce.boolean(),
Capacitive: z.coerce.boolean(),
CabTemp: z.coerce.boolean(),
Door: z.coerce.boolean(),
});
const saunaAlarmEventFieldDataPayloadSchema = z.object({
type: z.literal("sauna"),
StoveTemp: z.coerce.boolean(),
VinBus: z.coerce.boolean(),
Ntc: z.coerce.boolean(),
ThermalProtection: z.coerce.boolean(),
CabTemp: z.coerce.boolean(),
Potentiometer: z.coerce.boolean(),
});
const eccIotInfoSchema = z.object({
Id: z.string(),
Ts: z.coerce.date(),
Type: z.nativeEnum(FieldDataType),
HostId: z.string(),
Payload: z.discriminatedUnion("type", [
saunaAlarmEventFieldDataPayloadSchema,
genericAlarmEventFieldDataPayloadSchema,
hammamAlarmEventFieldDataPayloadSchema,
]),
});
export const rawEventFieldDataSchema = z.object({
App: z.string(),
Cat: z.nativeEnum(EventCategory),
EccIOTEvent: eccIotInfoSchema,
});
export type RawEventFieldData = z.infer<typeof rawEventFieldDataSchema>;
const body = {
App: "EccIOT",
Cat: "Event",
EccIOTEvent: {
Id: "ecc-D8E39657C",
Ts: "2020/02/28 10:14:10",
Type: "HAlarm",
HostId: "0A229332",
Payload: {
type: "hamman",
BoilerFullTooSoon: 0,
EvLoad: 0,
EvDrain: 0,
VinBus: 0,
Ntc: 0,
Fan: 0,
Slave: 0,
HeaterFail: 0,
Capacitive: 0,
CabTemp: 0,
Door: 0,
},
},
};
const rawData: RawEventFieldData = rawEventFieldDataSchema.parse(body);
console.log(rawData);
from zod.
Related Issues (20)
- PanelOn: z.coerce.boolean(), is generating an optional field PanelOn. How can we require it?
- .default() should apply default if wrapped schema transforms to undefined HOT 1
- Using the key of string enum using nativeEnum? HOT 2
- cuid validation HOT 1
- GitHub Stars links to NPM
- idea: leverage module augmentation to reduce bundle size
- Zod/ React Hook Form - Dynamic Field Array - Conditional Field HOT 3
- Recursive schema with lazy() doesn't seem to work
- required not work HOT 7
- Create an error map in pt-br
- .color() function to validate that a string is a valid color. HOT 1
- datetime validation fails if seconds are missing
- z.union() inside of z.array repeats the same issue multiple times HOT 5
- Proposal: Ability to extract certain values from the validated objects while parsing
- z.date({ coerce: 'iso' })
- z.instanceOf error with class with private constructor
- Property 'pick' does not exist on type 'ZodType<Output, ZodTypeDef, Input>'.
- IP Validation + optional is behaving unexpectedly
- Use arrays to create unions HOT 3
- Support custom discriminators in `z.discriminatedUnion`
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from zod.