Comments (6)
Now that the requirement is 4.1+, any chance z.json()
gets revisited?
from zod.
@ggoodman I decided to add this snippet to the README so it's easier to find 👍 Thanks again!
from zod.
Yikes! When I copied the snippet above into the README I renamed Json
to jsonSchema
(to avoid confusion with the built-in JSON
class) but I forgot to change it everywhere 😬 Here's the correct snippet:
type Literal = boolean | null | number | string;
type Json = Literal | { [key: string]: Json } | Json[];
const literalSchema = z.union([z.string(), z.number(), z.boolean(), z.null()]);
const jsonSchema: z.ZodSchema<Json> = z.lazy(() =>
z.union([literalSchema, z.array(jsonSchema), z.record(jsonSchema)]),
);
jsonSchema.parse({
// data
})
Thanks for pointing this out! I fixed this in the README as well.
from zod.
Love this! I'd add it to the standard API (z.json()
) but the recursive type alias required TypeScript 3.7. Currently everything else in the lib only requires 3.2+ so I don't want to bump the version without a really compelling reason. But thanks for sharing!
from zod.
Hey @ggoodman or @vriad, thanks for this helpful snippet.
I'm slowly getting more comfortable with Zod. But every now and then I feel like I am just missing the point of something.
Now is such a time.
When using this snippet with say jsonSchema.parse(data)
I get this in the log.
types/util.ts:190:68 - error TS2693: 'Literal' only refers to a type, but is being used as a value here.
190 export const jsonSchema: z.ZodSchema<Json> = z.lazy(() => z.union([Literal, z.array(Json), z.record(Json)]));
~~~~~~~
types/util.ts:190:85 - error TS2693: 'Json' only refers to a type, but is being used as a value here.
190 export const jsonSchema: z.ZodSchema<Json> = z.lazy(() => z.union([Literal, z.array(Json), z.record(Json)]));
~~~~
types/util.ts:190:101 - error TS2693: 'Json' only refers to a type, but is being used as a value here.
190 export const jsonSchema: z.ZodSchema<Json> = z.lazy(() => z.union([Literal, z.array(Json), z.record(Json)]));
After trying to work this out I realised I am just playing whack a mole.
Any direction would be appreciated :)
from zod.
Sharing here in case it will help somebody else, for our application, we had to change the string
to be a symbol
to handle some of our more complex types:
type Json = Literal | { [key: symbol]: Json } | Json[];
from zod.
Related Issues (20)
- Error with `3.23.0` combined with package that uses `3.22.4` HOT 4
- [Feature Request] store validator function for z.refine HOT 1
- Type changes in 3.23 HOT 11
- Type changes in 3.23 breaks some code HOT 2
- "Type instantiation is excessively deep and possibly infinite." when using Zod versions 3.23.0 and 3.23.1 together. HOT 7
- JSDoc hints are lost after using `.extend` HOT 3
- Default enum generic
- Zod dealing with image object HOT 2
- Password match validation don't hide error, when input name not mentioned in refine() 'path' has changed HOT 1
- Huge memory and performance gap between `parse` and `parseAsync` HOT 2
- Override safeParse and parse behavior at a given key HOT 9
- z.literal with objects HOT 1
- question: can I generate a zeroed out object from a schema with validation? HOT 1
- Reversing nullable on schema HOT 1
- feat: single method to comine `.unwrap().unwrap()` HOT 1
- zod a field whose type is jsonLogic.RulesLogic. From type to zod HOT 1
- Issue with inferring types from pipes. HOT 6
- `z.literal` message not customizable HOT 3
- Add Search Bar Functionality to zod HOT 1
- Inability to retrieve keys from z.nativeEnum type
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.