# Introductie Types van Nieuwactie

> Selecteer typen voor input, parameter, query en output definities, inclusief conversies en afgewezen waarden.

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: nl
Content-SHA256: e869a60eeb217502f9a6a050b41987ad648757ea5b9517f937f02b377cda054a
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

Een definitie is een lijst van `name:Type` gescheiden door komma's, bijvoorbeeld `*email:Email, age:Number`. Een `*` voor de naam maakt het veld verplicht. Hetzelfde formaat wordt gebruikt door `input` (de body), `params`, `query` en `output`. **Het type zet de waarde om**: de actie ontvangt de omgezette waarde, niet de verzonden tekst.

De namen van de typen zijn niet hoofdlettergevoelig. Elk type hieronder is gecontroleerd door de waarde uit de tweede kolom te sturen.

| Type | Verzonden waarde | Ontvangen waarde | Opmerkingen |
|---|---|---|---|
| `String` | `  hello  ` | `hello` | Tekst; spaties aan het begin en einde worden verwijderd. |
| `Text` | `  text  ` | `  text  ` | Tekst precies zoals die is verzonden. |
| `Email` | ` A@B.CZ ` | `a@b.cz` | Een geldig e-mailadres, in kleine letters; al het andere wordt geweigerd. |
| `Phone` | `+421 900 123 456` | `+421900123456` | Een telefoonnummer; spaties worden verwijderd. |
| `URL` | `https://totaljs.com/x` | `https://totaljs.com/x` | Een geldige URL; al het andere wordt geweigerd. |
| `Name` | `john smith` | `John Smith` | Zet elk woord met een hoofdletter. |
| `Capitalize` | `hello big world` | `Hello Big World` | Zet elk woord met een hoofdletter. |
| `Capitalize2` | `HELLO big WORLD` | `Hello big world` | Alleen de eerste letter een hoofdletter, de rest kleine letters. |
| `Lowercase` | `ABC` | `abc` | Kleine letters. |
| `Uppercase` | `abc` | `ABC` | Hoofdletters. |
| `Search` | `Žluťoučký Kůň` | `zlutoucki kun` | Kleine letters zonder accenten, om te zoeken. |
| `SafeString` | `plain text` | `plain text` | Tekst; een waarde met HTML-tags zoals `<b>` wordt geweigerd. |
| `Color` | `#FF0000` | `#FF0000` | [schema-enums-and-formats](/en/total5/schema-enums-and-formats/) |
| `Base64` | `SGVsbG8=` | `SGVsbG8=` | [schema-enums-and-formats](/en/total5/schema-enums-and-formats/) |
| `Zip` | `81101` | `81101` | [schema-enums-and-formats](/en/total5/schema-enums-and-formats/) |
| `Icon` | `ti ti-home` | `ti ti-home` | [schema-enums-and-formats](/en/total5/schema-enums-and-formats/) |
| `Number` | `12.5` | `12.5` | Een getal; de tekst wordt omgezet. |
| `Float` | `3.14` | `3.14` | Een getal; de tekst wordt omgezet. |
| `Decimal` | `2.5` | `2.5` | Een getal; de tekst wordt omgezet. |
| `Boolean` | `true` | `true` | `true` of `false`; de tekst `true` wordt omgezet. |
| `Date` | `2026-01-05` | `2026-01-05T00:00:00.000Z` | Een datum. In JSON wordt die als ISO-tekst verzonden. |

Andere vormen:

| Vorm | Voorbeeld | Opmerkingen |
|---|---|---|
| `[String]`, `[Number]` | `ze_arr:[String]` | Een array van dat type: elk item wordt omgezet. |
| `{ x:Number, y:String }` | `zg_obj:{ x:Number, y:String }` | Een genest object, gevalideerd met zijn eigen velden. |
| `String(5)` | `zd_max:String(5)` | Een tekst van maximaal 5 tekens; een langere tekst wordt geweigerd. |

Een waarde die niet bij het type past, wordt geweigerd met status 400 en de naam van het veld in de fout. Deze waarden werden geweigerd bij de controles: `SafeString` met `<b>x</b>`, `String(5)` met tien tekens, een `UID` met `abc` en een `GUID` met `not-guid`. Het grenswaardenrecept controleert `Int`, `SmallInt`, `TinyInt`, `Number2`: [numeric-schema-boundaries](/en/total5/numeric-schema-boundaries/). In deze versie kapt `Int` niet af: `7.9` blijft `7.9`.

`UID` en `GUID` accepteren de waarden die `UID()` en `GUID()` maken.

```js definitions/types.js
NEWACTION('Types/all', {
	name: 'Every type',
	input: 'a_string:String, b_text:Text, c_email:Email, d_phone:Phone, e_url:URL, f_name:Name, g_capitalize:Capitalize, h_capitalize2:Capitalize2, i_lowercase:Lowercase, j_uppercase:Uppercase, k_search:Search, l_safestring:SafeString, m_color:Color, n_base64:Base64, o_zip:Zip, p_icon:Icon, q_number:Number, r_float:Float, s_decimal:Decimal, t_boolean:Boolean, u_date:Date, ze_arr:[String], zf_nums:[Number], zg_obj:{ x:Number, y:String }, zd_max:String(5)',
	action: function($, model) {
		$.callback(model);
	}
});

NEWACTION('Types/ids', {
	name: 'UID and GUID',
	input: '*id:UID, *key:GUID',
	action: function($, model) {
		$.callback(model);
	}
});
```

```js controllers/types.js
exports.install = function() {
	ROUTE('POST /types/ @json --> *Types/all');
	ROUTE('POST /ids/ @json --> *Types/ids');
	ROUTE('GET /newids/', ids);
};

function ids($) {
	$.json({ id: UID(), key: GUID() });
}
```
