Skip to content

Confusing error messages from either #169

@ChrisNixTriller

Description

@ChrisNixTriller

node: 16.14.0
typescript: 4.5.5
computed-types: 1.11.2

      const schema = Schema.either(
        {
          foo: string.equals('X'),
          bar: array.max(0),
          baz: array.min(1),
        },
        {
          foo: string.equals('Y'),
          bar: array.min(1),
          baz: array.max(0),        
        },
      )

      const obj = { foo: 'Y', bar: [], baz: [] }

      const validator = schema.destruct()

      const [err, validatedObj] = validator(obj)

The error message above is bar: Expect array to be minimum of 1 items (actual: 0). This makes sense for the value of foo === 'Y'.

Here's a curious observation... If I use const obj = { foo: 'X', bar: [], baz: [] }, then the error changes to foo: Expect value to equal "Y". Two notes:

  1. I think that the error is harder to understand since the error reports the path foo to be wrong, when arguably it's the baz array that's not matching the schema.
  2. The error differs from the case given in the initial snippet. However, the cases are symmetric about X and Y (apart from the order in the either definition), so one might expect the errors to be similar.

Obviously, the analogous error occurs if I swap the order of the schemas in the either definition.

This is really pedantic, I know. The library is great and hopefully this is just some useful feedback for thought.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions