DoneJS StealJS jQuery++ FuncUnit DocumentJS
6.0.1
5.33.2 4.3.0 3.14.1 2.3.35
  • About
  • Guides
  • API Docs
  • Community
  • Contributing
  • Bitovi
    • Bitovi.com
    • Blog
    • Design
    • Development
    • Training
    • Open Source
    • About
    • Contact Us
  • About
  • Guides
  • API Docs
    • Observables
      • can-bind
      • can-compute
      • can-debug
      • can-deep-observable
      • can-define
        • static
          • types
        • types
          • PropDefinition
          • ValueOptions
        • behaviors
          • default
          • Default
          • get
          • identity
          • serialize
          • set
          • type
          • Type
          • value
      • can-define/list/list
      • can-define/map/map
      • can-define-backup
      • can-define-stream
      • can-define-stream-kefir
      • can-event-queue
      • can-kefir
      • can-list
      • can-map
      • can-map-compat
      • can-map-define
      • can-observable-array
      • can-observable-object
      • can-observation
      • can-observation-recorder
      • can-observe
      • can-simple-map
      • can-simple-observable
      • can-stream
      • can-stream-kefir
      • can-value
    • Views
      • can-attribute-observable
      • can-component
      • can-observable-bindings
      • can-stache
      • can-stache-bindings
      • can-stache-converters
      • can-stache-element
      • can-stache-route-helpers
      • can-view-autorender
      • can-view-callbacks
      • can-view-import
      • can-view-model
      • can-view-parser
      • can-view-scope
      • can-view-target
      • steal-stache
    • Data Modeling
      • can-connect
      • can-connect-feathers
      • can-connect-ndjson
      • can-connect-tag
      • can-define-realtime-rest-model
      • can-define-rest-model
      • can-fixture
      • can-fixture-socket
      • can-local-store
      • can-memory-store
      • can-ndjson-stream
      • can-query-logic
      • can-realtime-rest-model
      • can-rest-model
      • can-set-legacy
      • can-super-model
    • Routing
      • can-deparam
      • can-param
      • can-route
      • can-route-hash
      • can-route-mock
      • can-route-pushstate
    • JS Utilities
      • can-assign
      • can-define-lazy-value
      • can-diff
      • can-globals
      • can-join-uris
      • can-key
      • can-key-tree
      • can-make-map
      • can-parse-uri
      • can-queues
      • can-string
      • can-string-to-any
      • can-zone-storage
    • DOM Utilities
      • can-ajax
      • can-attribute-encoder
      • can-child-nodes
      • can-control
      • can-dom-data
      • can-dom-events
      • can-dom-mutate
      • can-event-dom-enter
      • can-event-dom-radiochange
      • can-fragment
    • Data Validation
      • can-define-validate-validatejs
      • can-type
      • can-validate
      • can-validate-interface
      • can-validate-legacy
      • can-validate-validatejs
    • Typed Data
      • can-cid
      • can-construct
      • can-construct-super
      • can-data-types
      • can-namespace
      • can-reflect
      • can-reflect-dependencies
      • can-reflect-promise
      • can-types
    • Polyfills
      • can-symbol
      • can-vdom
    • Core
    • Infrastructure
      • can-global
      • can-test-helpers
    • Ecosystem
    • Legacy
  • Community
  • Contributing
  • GitHub
  • Twitter
  • Chat
  • Forum
  • News
Bitovi

Type

  • Edit on GitHub

Provides a constructor function to be used to convert any set value into an appropriate value.

Type

A constructor function can be provided that is called to convert incoming values set on this property, like:

import {DefineMap} from "can";
import {Person} from "//unpkg.com/can-demo-models@5";

const Example = DefineMap.extend({
  prop: {
    Type: Person
  }
});
const ex = new Example();
ex.prop = {first: "Justin", last: "Meyer"};

console.log( ex.prop instanceof Person ); //-> true
console.log( ex.prop.fullName ); //-> "Justin Meyer"

The Type constructor is called before the type property and before set. It checks if the incoming value is an instanceof Type. If it is, or if it is null or undefined, it passes the original value through. If not, it passes the original value to new Type(originalValue) and returns the new instance to be set.

{propDefinition}

A PropDefinition that defines an inline can-define/map/map type. For example:

{
  address: {
    Type: {
      street: "string",
      city: "string"
    }
  }
}

[Type|propDefinition]

Defines an inline can-define/list/list type that's an array of Type or inline PropDefinition can-define/map/map instances. For example:

import {DefineMap} from "can";
import {Person} from "//unpkg.com/can-demo-models@5";

const List = DefineMap.extend({
  people: {
    Type: [ Person ]
  },
  addresses: {
    Type: [ {
      street: "string",
      city: "string"
    } ]
  }
});

const myList = new List({
  people: [ {first: "Justin", last: "Meyer"} ],
  addresses: [ {street: "11 Example Ave.", city: "Chicago"} ]
});

console.log( myList.serialize() );

Use

import {DefineMap, Reflect as canReflect} from "can";

const Address = DefineMap.extend( {
    street: "string",
    city: {type:"string", default: "Chicago"}
} );

const Direction = DefineMap.extend( {
    from: { Type: Address },
    to: Address
} );

const direction = new Direction( {
    from: {street: "2060 N. Stave"},
    to: new Address( {street: "123 Greenview", city: "Libertyville"} )
} );

console.log( direction.from instanceof Address ); //-> true
console.log( direction.serialize() ); //-> {
//   from: {city: "Chicago", street: "2060 N. Stave"}
//   to: {city: "Libertyville", street: "123 Greenview"}
// }

CanJS is part of DoneJS. Created and maintained by the core DoneJS team and Bitovi. Currently 6.0.1.

On this page

Get help

  • Chat with us
  • File an issue
  • Ask questions
  • Read latest news