Cours Angular · Module 1: Introduction à Angular

TypeScript pour Angular - Le code Bushido du code

2 min de lecture
Dans cette leçon4

TypeScript est le langage qu'exige Angular pour fonctionner. C'est comme le code Bushido - il impose la discipline, mais offre en retour fiabilité et prévisibilité.

Pourquoi TypeScript ?

TypeScript, c'est du JavaScript avec un typage statique :

  • Détecte les erreurs avant l'exécution du code
  • Meilleure autocomplétion dans l'éditeur
  • Code auto-documenté
  • Refactoring sans crainte

Les types de base

1// Types simples
2const name: string = 'Musashi';
3const age: number = 25;
4const isActive: boolean = true;
5
6// Tableaux
7const techniques: string[] = ['Kendo', 'Iaido', 'Judo'];
8const levels: Array<number> = [1, 2, 3, 4, 5];
9
10// Objets avec interface
11interface Samurai {
12  name: string;
13  clan: string;
14  level: number;
15  techniques?: string[]; // ? signifie optionnel
16}
17
18const warrior: Samurai = {
19  name: 'Miyamoto Musashi',
20  clan: 'Niten Ichi-ryū',
21  level: 10
22};

Le typage dans Angular

Typer les composants

1import { Component, Input, Output, EventEmitter } from '@angular/core';
2
3interface Task {
4  id: number;
5  name: string;
6  completed: boolean;
7}
8
9@Component({
10  selector: 'app-task-list',
11  standalone: true,
12  template: `
13    @for (task of tasks; track task.id) {
14      <div (click)="select(task)">
15        {{ task.name }}
16      </div>
17    }
18  `
19})
20export class TaskListComponent {
21  @Input() tasks: Task[] = [];
22  @Output() taskSelected = new EventEmitter<Task>();
23
24  select(task: Task): void {
25    this.taskSelected.emit(task);
26  }
27}

Typer les services

1import { Injectable } from '@angular/core';
2import { Observable, of } from 'rxjs';
3
4interface Samurai {
5  id: number;
6  name: string;
7  rank: string;
8}
9
10@Injectable({
11  providedIn: 'root'
12})
13export class SamuraiService {
14  private samuraiList: Samurai[] = [
15    { id: 1, name: 'Musashi', rank: 'Master' },
16    { id: 2, name: 'Kojiro', rank: 'Expert' }
17  ];
18
19  getSamuraiList(): Observable<Samurai[]> {
20    return of(this.samuraiList);
21  }
22
23  getSamuraiById(id: number): Observable<Samurai | undefined> {
24    return of(this.samuraiList.find(s => s.id === id));
25  }
26}

Le mode strict - Le plus haut niveau de discipline

Dans tsconfig.json, Angular active le mode strict par défaut :

1{
2  "compilerOptions": {
3    "strict": true,
4    "noImplicitAny": true,
5    "strictNullChecks": true,
6    "strictPropertyInitialization": true
7  }
8}

C'est comme s'entraîner sous les ordres du maître le plus strict - exigeant, mais façonnant les meilleurs guerriers du code !

Tu as repéré une erreur dans cette leçon ?

Teste tes connaissances

Réponds aux questions de cette leçon. Choisis une réponse pour voir tout de suite si elle est correcte.

  1. 1. Pourquoi Angular nécessite-t-il TypeScript ?

  2. 2. Que signifie le point d'interrogation (?) à côté du nom d'un champ dans une interface TypeScript, par exemple 'techniques?: string[]' ?

  3. 3. Comment déclare-t-on correctement un tableau de chaînes de caractères en TypeScript ?

Tâches pratiques dans le jeu

  • Tri horizontal

    Ordonne sur une seule ligne la déclaration correcte d'une variable de type string :

  • Tri vertical

    Ordonne les lignes d'une définition d'interface TypeScript (de haut en bas) :

  • Clique dans l'ordre

    Clique dans l'ordre pour construire un champ d'interface typé : level: number;

Articles utiles