Overview
When defining a model in LoopBack 4, property types are the important part. No
matter whether it is for defining properties with decorator @property
or
defining a model at runtime, you may want to specify the types in the
definition. The following is a typical property definition:
Defining a property with the decorator
@property({
type: 'string',
require: true,
// other fields
})
userName: String;
Defining a model at runtime
const UserDef = new ModelDefinition('User')
.addProperty('id', {type: 'number', id: true})
.addProperty('userName', {type: 'string'});
The following table summarizes LoopBack types.
Type | Description | Example |
---|---|---|
any | Any type, including array, object, Date, or GeoPoint | Any of: true , 123 , "foo" , [ "one", 2, true ] |
array |
JSON array See Array types below. |
[ "one", 2, true ] |
Boolean | JSON Boolean | true |
buffer | Node.js Buffer object |
new Buffer(42); |
date | JavaScript Date object |
|
GeoPoint |
LoopBack GeoPoint object |
new GeoPoint({lat: 10.32424, lng: 5.84978}); |
Date |
LoopBack DateString object |
|
null | JSON null | null |
number | JSON number |
|
Object |
JSON object or any type See Object types below. |
{ "userName": "John89", "age": 25, "vip": false} |
String | JSON string | "LoopBack" |
In general, a property will have undefined
value if no explicit or default
value is provided.
Tip: The type name is case-insensitive; so for example you can use either “Number” or “number”.
Note:
GeoPoint
is not supported. See GitHub issue
#1981
Array types
The following are examples of how you can define array type properties:
@property({
type: 'array',
itemType: 'string',
length: 20,
})
strAry?: string[]; // e.g ['can', 'only', 'contain', 'strings']
@property({
type: 'array',
itemType: 'number',
})
numAry?: number[]; // e.g [42, 998, 1]
@property({
type: 'array',
itemType: 'any',
})
anyAry?: any[]; // e.g ['LoopBack', 4, true]
@property({
type: 'array',
itemType: 'object',
})
ObjAry?: object[]; // e.g [{'Nodejs': 'LoopBack'}]
Object types
Use the Object type when you need to be able to accept values of different types, for example a string or an array.
A model often has properties that consist of other properties. For example, the
user model can have an address
property that is in type Address
, which has
properties street
, city
, state
, and zipCode
:
@model()
export class Address extends Entity {
@property({
type: 'number',
})
id: number;
// street, city, state, zipCode proper definitions ..
}
@model()
export class User extends Entity {
// other props
@property({
type: 'object',
})
address: Address;
}
The value of the address is the definition of the Address
type.
Important:
The User
model has to reference the Address
model.