Comments (7)
@Lonli-Lokli Hi, sorry for the delay in reply (Have been very busy of late)
TypeBox only supports a small subset of types for Record keys. These are String, Number, Boolean, TemplateLiteral and Union of Literal types. Rather than using Type.Any(), would recommend using Type.String() as it represents all permissible JSON keys (and is generally more type safe)
Will close of this issue for now, but if you have any questions, feel free to ping on this thread.
Cheers
S
from typebox.
@sinclairzx81 First of all, it's not mentioned anywhere in the docs, so I wasn't ready for a production runtime error.
Second, even if it's not supported why did you close this issue? Not supported !== Closed
from typebox.
@Lonli-Lokli Heya,
Second, even if it's not supported why did you close this issue? Not supported !== Closed
Should TypeBox support Any for keys? It would presumably also need to support Unknown and Never keys. It's feasible for TypeBox to implement a mapping for this, however in the Any and the Unknown case, the patternProperties
schema would need to resolve to String (meaning Any and Unknown would just be aliases for String).
I am open to considering this, however it would be good to get some insight into why you need Any for a Record key when String is both stricter and more correct (when considering Json validation where property keys are all string)
Keep me posted.
from typebox.
@sinclairzx81 Yeah, so I have cases in business Logic when keys must be a number. either direct or via enum. So for me it's easier to write parser in any
from typebox.
@Lonli-Lokli Hiya,
Have published an update to resolve this on 0.32.35. Record keys can now be Any
or Never
. If an invalid key type is passed to Record, the return type will be TNever
(indicating no valid Record type can be constructed). Note that Any
is just an alias for String
, and Never
produces a regular expression for patternProperties
that will always fail (inline with TS semantics)
Hope this helps
S
from typebox.
@sinclairzx81 Thanks!
Is there any way to make compilation error in this scenario? Eg in the snippet from first post, will it be possible to have an error from TypeCompiler.Compile that there is a never
type in chain?
from typebox.
@Lonli-Lokli Heya,
Is there any way to make compilation error in this scenario? Eg in the snippet from first post, will it be possible to have an error from TypeCompiler.Compile that there is a never type in chain?
Never types are analogous to the TypeScript never
type and are considered standard (so should compile the same as they do in TypeScript). In TypeBox, the TNever
type is used to hint that a user type composition produced an illogical type that will always fail to check a value. They are partially used to signal composition error but are not actually errors. Generally, you should always check the return type of a composition to ensure it generated the expected type.
Pretty keen to keep the Never type as is; as it is a critical component of the type system.
from typebox.
Related Issues (20)
- Transform + Map/Index does not work HOT 4
- Update the error message for required properties HOT 3
- Covariance issue with `TypeCheck<TSchema>` and `TypeCheck<TObject<{}>>` HOT 1
- Default values in nested objects are not generated HOT 2
- Doubt on Record HOT 2
- TypeCompiler compile on Type.Strict(T) - Preflight validation check failed to guard for the given schema HOT 2
- Max call stack size exceeded HOT 1
- Value.Convert() doesn't work with nullable record HOT 1
- Variadic Any Typed function parameters HOT 2
- How to do a cross field validation? HOT 3
- Undefined is incorrectly handled in Diff HOT 3
- QoL helper: `TypeCheck.Ensure` HOT 3
- Usage of `Type.Composite` with `Type.TemplateLiteral` HOT 3
- `Check` doesn't validate strings with enums HOT 4
- `Type.Omit` mixed with `Type.Union` is not preserving the `additionalProperties` attribute HOT 2
- Advice to compose types HOT 3
- Access to schema properties for non TObject schemas HOT 5
- Type.Optional with Type.Transform unexpected behaviour HOT 1
- ts(7056) when you try to export a big union type HOT 1
- `Value.Default` does not traverse object schema HOT 2
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.