Coder Social home page Coder Social logo

Comments (2)

sinclairzx81 avatar sinclairzx81 commented on June 11, 2024

@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.

Bubz43 avatar Bubz43 commented on June 11, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.