Structure
Structure v2
Structure v2
  • Introduction
  • Schema concept
    • Shorthand and complete attribute definition
    • Circular reference
    • Nullable attributes
  • Custom setters and getters
  • Coercion
    • Primitive type coercion
    • Arrays coercion
    • Generic coercion
    • Recursive coercion
    • Disabling coercion
  • Validation
    • String validations
    • Number validations
    • Boolean validations
    • Date validations
    • Array validations
    • Attribute reference
    • Nested validations
    • Validate raw data
  • Strict mode
  • Cloning an instance
  • Serialization
  • Testing
  • Battlecry generators
  • Migrating from v1
  • Support and compatibility
  • Changelog
  • Contributing
  • License
  • GitHub
Powered by GitBook
On this page

Was this helpful?

  1. Coercion

Generic coercion

If the declared type is not a primitive nor Array (or an array subclass) it'll do generic coercion. When generic coercing a value, Structure will just instantiate the declared type (using new) passing the raw value as the parameter (only if the raw value isn't of the declared type already).

class Location {
  constructor({ x, y }) {
    this.x = x;
    this.y = y;
  }
}

const User = attributes({
  location: Location,
})(class User {});

const userOne = new User({
  location: new Location({ x: 1, y: 2 }),
});

userOne.location; // Location { x: 1, y: 2 } => no coercion was done

const userTwo = new User({
  location: { x: 3, y: 4 },
});

userTwo.location; // Location { x: 3, y: 4 } => coerced plain object to Location
PreviousArrays coercionNextRecursive coercion

Last updated 4 years ago

Was this helpful?

Coercion to Date type enters in this same category, so if you have an attribute of the type Date, it'll use new Date(<raw value>) to coerce it. For more info about how this coercion works check the cases for value and dateString parameters on .

Date documentation