# Typing

{% hint style="success" %}
This is the official documentation of the `@forestadmin/agent` Node.js agent.
{% endhint %}

Fields on Forest Admin can either use `Primitive Types` or `Composite Types`.

### Primitive types

The primitive types which are supported by Forest Admin are the following:

| Forest Admin Type | Language Type                                              |
| ----------------- | ---------------------------------------------------------- |
| Boolean           | Boolean                                                    |
| Date              | String with format "1985-10-26T01:22:00-08:00Z" (ISO-8601) |
| Dateonly          | String with format "1985-10-26"                            |
| Enum              | String                                                     |
| JSON              | Any JSON compatible value                                  |
| Number            | Number                                                     |
| Point             | Array of 2 Numbers                                         |
| String            | String                                                     |
| Timeonly          | String with format "01:22:00"                              |
| Uuid              | String with uuid v4 format                                 |

### Composite types

{% hint style="info" %}

* Fields using composite types are not sortable and do not implement validation.
* Fields that are an array of a primitive type **only** are filterable (depending on the data source).
  {% endhint %}

```js
// Object containing 2 strings
const typeOfObjectWithTwoStrings = { firstName: 'String', lastName: 'String' };

// Array of strings
const typeOfArrayOfStrings = ['String'];

// Array of objects
const typeOfArrayOfObjects = [{ content: 'String' }];

// Object containing a 2d-grid of numbers
const typeOfObjectContainingAGridOfNumbers = { content: [['Number']] };
```

When using composite types, the data in the UI may not be displayed as you expect!

| Composite Type                        | Example                                         | How it gets displayed                       |
| ------------------------------------- | ----------------------------------------------- | ------------------------------------------- |
| Array of primitive type               | `[ 'array', 'of', 'strings']`                   | As a custom widget in the edition form      |
| Object                                | `{ title: "the godfather"}`                     | As a nested form in the edition form        |
| Array of object                       | `[{ title: "the shawshank redemption"}]`        | As a new collection in Related Data section |
| Array of object (with nested objects) | `[{ rating: { kind: 'MPA", value: "PG-13" } }]` | JSON editor in the edition form             |
| Anything else                         |                                                 | JSON editor in the edition form             |

If you want to force displaying your data as a new Collection in the Related Data section, but can't because your data model contains nested objects, you may consider typing all nested objects as `'JSON'`.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.forestadmin.com/developer-guide-agents-nodejs/under-the-hood/data-model/typing.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
