Comments (2)
@liyofx Hiya,
TypeBox does not support cyclic types. The issue here is that these type functions are cyclically initializing each other. You can reproduce the issue by calling the userFindMany()
function only.
userFindMany() // results in a cyclic type
// userFindMany -> UserSelectObjectSchema ->
// bookFindMany -> BookSelectObjectSchema -> UserArgsObjectSchema -> UserSelectObjectSchema ->
// bookFindMany -> BookSelectObjectSchema -> UserArgsObjectSchema -> UserSelectObjectSchema ->
// bookFindMany -> BookSelectObjectSchema -> UserArgsObjectSchema -> UserSelectObjectSchema ->
// bookFindMany -> ...infinite
You can somewhat approach cyclic types using Type.Ref
however cyclic type inference is not well supported in TypeBox (due to difficulties getting TypeScript to handle infinite instantiations). Additionally, cyclic, self referential values are non-serializable in JSON.
The recommendation for handling these types would be use either use Type.Ref
or just explicitly implement a custom type and register via the TypeRegistry. Another approach may be to use a generic recursive type, but would likely require refactoring (or restructuring the type to support)
Will close off this issue as this functionality is currently not supported.
All the best
S
from typebox.
@sinclairzx81
I tried Type.Ref, but it still didn't work. I hope you can give me a simple example. Thank you.
from typebox.
Related Issues (20)
- Encoding does not ignore undefined values HOT 2
- Incorrect symbol escapement in record keys HOT 2
- Value.Hash doesn't work with Unicode strings HOT 3
- Given a type, convert it to Typebox HOT 2
- `TypeCheck<any>` results in `TS2589: Type instantiation is excessively deep and possibly infinite.` HOT 2
- `TypeSystem.Type` returning `any` after updating to `0.32.16` HOT 1
- Type.Schema HOT 2
- Preflight validation check failed to guard for the given schema when using `structuredClone` HOT 2
- `Value.Convert` to a `Union` no longer checks destination type validity HOT 2
- Error when trying to use TSchema as a generic HOT 2
- How to use `Value.Check` with raw json schemas? HOT 4
- Regression bug 0.32.19 HOT 2
- TypeGuard.IsEnum HOT 2
- Better pre-validation errors for invalid TypeBox schema HOT 2
- Static resolution is not working as expected when using a generic function to generate a schema HOT 3
- tsconfig "strict": true - ignore modifiers HOT 2
- `Static` types cannot be used to enforce types from a generic parameter HOT 3
- Applying refinements + general advice on my implementation HOT 11
- Unable to create value of custom class type HOT 2
- Migrate to regexp vs string type in pattern HOT 4
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 typebox.