Comments (2)
@Bubz43 Hi! Thanks for the suggestion (and apologies for the delay in reply)
Ah, there's not too much I could implement here. I think hash would work for unique arrays of string (and I suppose bigint arrays), but wouldn't generalize out to other types (which would be the preference). Note that TypeBox has quite a few "non-instantiable" types; and the library has essentially conceded that some types just cannot be instantiated in a reasonable and predictable way....
While this usually occurs when a type has a data constraint applied (like uniqueItems
), it can also apply to illogical intersection (i.e. string & number
) or non-constrained (or constrained) infinite recursive types ...
// ValueCreateError: Array with the uniqueItems constraint requires a default value.
const T = Type.Array(Type.Object({ value: Type.String() }), {
uniqueItems: true,
minItems: 2 // N + 2
});
// ValueCreateError: Intersect produced invalid value. Consider using a default value.
const T = Type.Intersect([Type.String(), Type.Number()])
// ValueCreateError: Cannot create recursive type as it appears possibly infinite. Consider using a default.
const T = Type.Recursive(This => Type.Object({
items: Type.Array(This, { minItems: 1 }) // 1 item explodes
}))
I think in the uniqueItems
case, It might be possible to update the assertion logic to check minItems
is either length 0 or 1 (if specified). But for now, I am quite keen to keep the defacto default
in there as it keeps the logic simple and predictable (at least for now, but will investigate following a couple of pending updates I want to take a look at on Create)
Will add a consideration
tag and pick this up at a later time, but will close off for now.
Thanks again!
S
from typebox.
Hey thanks for the response, but I think my post was vague in what I meant.
My suggestion is using Value.Hash
to dedupe
the unique array, not to create anything. The current behavior in https://github.com/sinclairzx81/typebox/blob/master/src/value/cast/cast.ts#L114 relies on using a Set to dedupe the array, which won't work with objects.
Having the default
be required is fine and not a problem.
from typebox.
Related Issues (20)
- Type instantiation is excessively deep and possibly infinite .ts(2589) when using Type.Exclude HOT 2
- JsonTypeBuilder#Record not passing on options HOT 1
- No implicit defaults on Value.Create() HOT 5
- [BUG] Value.create caches the default date HOT 1
- Feature request: Value.Assert and TypeCheck.Assert HOT 3
- [Feature Request?] allow more flexible input for string pattern HOT 3
- Individual types imports naming conflict with native classes HOT 4
- Strict error: Unknown type HOT 2
- Maximum call stack size exceeded. HOT 2
- TUnion of literals from const array HOT 2
- "Value.Clean" doesn't work with Unions of objects with prohibited additionalProperties HOT 3
- JS floating point precision bug causes multipleOf validation to fail HOT 4
- Tuple with rest items (or Array with prefixedItems) HOT 2
- useDefaults HOT 3
- Support for discriminator HOT 1
- Support for self-referencing fields of recursive type HOT 2
- Property '[Kind]' is missing in type 'TObject' but required in type 'TObject<TProperties>' HOT 3
- [feat] Bail / Early Cancel Mode HOT 1
- Setting Description HOT 1
- Schema dependency using Typebox HOT 3
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.