> For the complete documentation index, see [llms.txt](https://guide-angular.wishtack.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://guide-angular.wishtack.io/typescript/types.md).

# Types

## Les types les plus fréquents

### boolean

```typescript
let value: boolean;
value = true;
```

### number

```typescript
let value: number;
value = 10;
value = 10.3;
value = Infinity;
value = NaN;
```

### string

```typescript
let value: string;
value = 'Foo BAR';
```

### array

```typescript
let value: string[];

value = ['Angular', 'Python'];

value.push(42); // error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'.
```

### enum

```typescript
enum Role {
    Coder,
    Developer
}

let role: Role;

role = Role.Developer;

console.log(role); // 1
console.log(Role[role]); // Developer
```

{% hint style="danger" %}
Comme dans de nombreux langages, il est préférable d'éviter les enums à auto-incrément pour les raisons suivantes :

* Ce type d'enums décourage le refactoring car il est nécessaire de "rebuild" toutes les applications et librairies qui en dépendent. *(On revient aux problèmes de compatibilité binaire etc...)*
* Le debug est moins pratique.
* Il faut absolument passer par un serializer/deserializer pour communiquer la valeur avec d'autres applications, services etc...
  {% endhint %}

### string enum

```typescript
enum Role {
    Coder = 'coder',
    Developer = 'developer'
}

let role: Role;

role = Role.Developer;

console.log(role); // developer
```

### Number, String, Boolean and Object

{% hint style="danger" %}
N'utilisez jamais les types suivants : **Number**, **String**, **Boolean** et **Object**.

Ce ne sont pas les types primitifs. Considérez-les comme "legacy".\
\
Au lieu de `Object`, utilisez le type TypeScript `object`.
{% endhint %}

## Paramètres optionnels

Contrairement à l'ECMAScript où tous les paramètres sont considérés optionnels, en TypeScript, les paramètres doivent être explicitement indiqués comme optionnels avec la syntaxe suivante :

```typescript
const sendMessage = (email: string, message: string, subject?: string) => {
    console.log(`${email}: [${subject}] ${message}`);
};

sendMessage(); // error TS2554: Expected 2-3 arguments, but got 0.

sendMessage('contact@wishtack.com', 'Help!'); // contact@wishtack.com: [undefined] Help!
sendMessage('contact@wishtack.com', 'Help!', 'Coaching'); // contact@wishtack.com: [Coaching] Help!
```

... ou en spécifiant une valeur par défaut :

```typescript
const sendMessage = (email: string, message: string, subject: string = null) => {
    console.log(`${email}: [${subject}] ${message}`);
};

sendMessage('contact@wishtack.com', 'Help!'); // contact@wishtack.com: [null] Help!
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://guide-angular.wishtack.io/typescript/types.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
