Comments (4)
Is this what you are looking for?
const numPlayersBase = z.number().int().min( 2 ).max( 100 )
type NumPlayers = z.infer<typeof numPlayersBase>
type RealNumPlayers = IRange<2, 100> // 2 | 3 | 4 | ... | 100
const numPlayers = z.custom<RealNumPlayers>( data => numPlayersBase.safeParse( data ).success )
If you found my answer satisfactory, please consider supporting me. Even a small amount is greatly appreciated. Thanks friend! 🙏
https://github.com/sponsors/JacobWeisenburger
from zod.
Hi Jacob,
Your answer is great in that it does indeed leverage the Zod validation. And one could easily add their own logic afterward.
However, I still think there is room for improvement. There would be no need to run base.SafeParse
at all if custom
existed on the method chain. In other words:
type NumPlayers = IRange<2, 100>; // 2 | 3 | 4 | ... | 100
const numPlayersBase = z.number().int().min(2).max(100);
const numPlayers = z.custom<RealNumPlayers>(data => numPlayersBase.safeParse(data).success);
versus
type NumPlayers = IRange<2, 100>; // 2 | 3 | 4 | ... | 100
const numPlayers = z.number().int().min(2).max(100).custom<NumPlayers>();
The second snippet is more concise and easier to read!
from zod.
So I'm gathering that you are wanting this to be a new feature instead of asking for a workaround, is that correct?
from zod.
Yes, this is a feature request issue.
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 4
- 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 2
- 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.