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
  • Disabling for the whole structure
  • Disabling for specific attributes
  • Overwritting structure option with attribute option

Was this helpful?

  1. Coercion

Disabling coercion

You can disable coercion for a whole structure or for attributes individually using the coercion option in the schema and attribute options, respectively. Notice that it will cause validation to fail when the passed value is not of the expected value:

Disabling for the whole structure

const User = attributes(
  {
    name: String,
    age: Number,
  },
  {
    coercion: false,
  }
)(class User {});

const user = new User({ name: 123, age: '42' });

user.name; // 123
user.age; // '42'

const { valid, errors } = user.validate();

valid; // false
errors; /*
[
  { message: '"name" must be a string', path: ['name'] },
  { message: '"age" must be a number', path: ['age'] }
]
*/

Disabling for specific attributes

const User = attributes({
  name: { type: String, coercion: false },
  age: Number,
})(class User {});

const user = new User({ name: 123, age: '42' });

user.name; // 123
user.age; // 42

const { valid, errors } = user.validate();

valid; // false
errors; /*
[
  { message: '"name" must be a string', path: ['name'] }
]
*/

Overwritting structure option with attribute option

If you define the coercion option both for the structure and for an attribute, the structure one will apply for the whole schema except the specific attributes that overwrite it:

const User = attributes(
  {
    name: { type: String, coercion: true },
    age: Number,
  },
  {
    coercion: false,
  }
)(class User {});

const user = new User({ name: 123, age: '42' });

user.name; // '123'
user.age; // '42'

const { valid, errors } = user.validate();

valid; // false
errors; /*
[
  { message: '"age" must be a number', path: ['age'] }
]
*/
PreviousRecursive coercionNextValidation

Last updated 4 years ago

Was this helpful?