Comment on page
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: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'] }
]
*/
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'] }
]
*/
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'] }
]
*/
Last modified 3yr ago