types
Specify a type to convert values to. Type coercion only applies when setting a property.
All types leave null and undefined as is except for
the "htmlbool" type converter.
Object
All of the following type names can be used as part of a type property behavior like:
DefineMap.extend({
age: {type: "number"}
});
Or they can be used in the type property definition shorthand:
DefineMap.extend({
age: "number"
});
Options
-
observable
{function}:The default type behavior. It converts plain Objects to DefineMaps and plain Arrays to DefineLists. Everything else is left as is.
-
any
{function}:Leaves the set value as is, performs no type conversion. Aliased as
*. -
string
{function}:Converts to a string with
""+val. This is the equivalent to MaybeString. -
date
{function}:Converts to a JavaScript date using
Date.parse(val)if a string is given ornew Date(val)if a number is passed. This is the equivalent to MaybeDate. -
number
{function}:Converts to a number with
+(val). This is the equivalent to MaybeNumber. -
boolean
{function}:Converts to
falseifvalis falsey,"0", or"false"; otherwise, converts totrue. This is the equivalent to MaybeBoolean. -
htmlbool
{function}:Like
boolean, but converts totrueif empty string ("") is passed. -
compute
{function}:Allows computes to be passed and the property take on the value of the compute.
-
stringOrObservable
{function}:Converts plain Objects to DefineMaps, plain Arrays to DefineLists and everything else to strings. This is useful for routing.
Use
Use any of the type names on a PropDefinition's type or directly on the prototype of a DefineMap or DefineList.
import {DefineMap} from "can";
const Person = DefineMap.extend( {
age: "number"
} );
const person = new Person( {age: "30"} );
console.log( person.age ); //-> 30
You can also pass these functions in directly:
import {DefineMap, define} from "can";
const Person = DefineMap.extend( {
age: define.types.number
} );
const person = new Person( {age: "30"} );
console.log( person.age ); //-> 30
And you can use the can-data-types types too:
import {DefineMap, MaybeNumber} from "can";
const Person = DefineMap.extend( {
age: MaybeNumber
} );
const person = new Person({age: "30"});
console.log( person.age ); //-> 30