image auteur
Lucas BENTO-VERSACE 8min • 26-11-2021

Typescript - Introduction

Typescript - Introduction

Dans cet article, découvrez les bases de TypeScript, et les raisons de l'utiliser ou non.

Qu'est-ce que Typescript ?

Typescript est un langage de programmation fortement typé et open-source, développé par Microsoft.

Aucun environnement n'exécute à proprement parler du TypeScript. Il est d'abord transpilé en JavaScript avant d'etre exécuté, généralement par un navigateur ou Node.js.

L'objectif de TypeScript est d'améliorer la maintenabilité et la lisibilité du code Javascript en permettant le typage des variables.

Typescript, langage compilé ?

Par abus de langage, on parle de compilation TypeScript. Mais si on veut être exact, on doit parler de transpilation : en effet Typescript n'est pas réellement compilé.

Une compilation transforme un langage "humain" en langage machine. Or, TypeScript est transformé en JavaScript, qui est un langage interpreté. Un langage interpreté est exécuté par un logiciel (un interpréteur de code), alors qu'un langage compilé est transformé en langage machine, et exécuté par un système d'exploitation.

Pourquoi Typescript ?

Typescript a été créé pour pallier certains manquements de Javascript. Principalement : le typage (d'où le nom TypeScript).

Le typage est souhaitable dans le sens où il permet d'améliorer la maintenabilité, la propreté et la lisibilité du code.

Le typage est aussi connu pour améliorer les performances mais à l'inverse des langages compilés, le typage n'améliore pas les performances dans le cas de TypeScript : le code est transformé en JavaScript, qui n'utilise pas les types ajoutés par TypeScript.

Les fonctionnalités de TypeScript

Voici une liste non exhaustive des fonctionnalités apportées par Typescript :

  • Le typage explicite/implicite
  • Les classes
  • L'héritage
  • Accesseurs public/private
  • Les interfaces
  • Les modules
  • Les énumérations
  • Les types génériques

Typescript s'adapte à la version de JavaScript que vous utilisez et est compatible avec Node.Js.

Le typage par annotation

Pour typer une variable explicitement, on utilise en TypeScript la notation ":" suivi du type. C'est ce qu'on appelle une annotation.

1
2
3
const title: string = 'test';
const page: number = 25;
const person: object = {};
Typage par annotation

Remarquez qu'un type a été attribué à chaque propriété. Mais si on essaie d'assigner une valeur qui ne correspond pas au type de la propriété cela produira une erreur :

1
2
let title: string = 'test';
title = 12; // TypeError: 12 is not a string
Erreur de compilation

Dans cet exemple, TypeScript n'ira pas au bout de la compilation car il détectera une erreur de typage.

Le typage par inférence

1
2
let title = "Hello";
title = 12; // TypeError: 12 is not a string
Typage par inférence

Ce code produit une erreur de compilation. Est-ce que vous devinez pourquoi ?

C'est parce que même si vous n'avez pas typé la variabletitle, le compilateur aura défini lui-même le type en fonction de la première valeur qui a été affectée à la variable. title est donc de type string et ne peut pas se voir attribué une valeur de type number.

On appelle ça le typage par inférence.

Composition de types

Vous pouvez aussi typer une variable de plusieurs types différents, grâce à la composition de types. Cela peut s'avérer utile, par exemple pour typer le retour des fonctions qui implémentent des conditions.

1
2
3
let age : string | number;
age = 12;
age = '12 ans';
Compositon de types

Ce code ne produira pas d'erreur car la variable est explicitement typée string OU number. Attention à ne pas abuser de cette fonctionnalité cependant, il est rarement une bonne idée de joindre des types aussi distincts que string et number.

La composition de type s'utilisera plutôt dans ce genre de cas :

1
2
let vehicle : Car | Boat;
let age: number | null;

Typage des fonctions

Pour les fonctions, vous pouvez typer les paramètres et/ou la valeur de retour comme ceci :

Valeur de retour

Pour typer une valeur de retour, placez une annotion de typage juste avant l'ouverture du bloc d'éxecution de la fonction (après la fermeture de la parenthèse).

1
2
3
function getAdminUser(): User {
//...
}
Typage de retour de fonction

Paramètres

Pour typer un paramètre, placez une annotion de typage juste après le nom du paramètre.

1
2
3
function searchUserById(userId: number) {
// ...
}
Typage de paramètre

Vous pouvez (et devriez!) bien sûr utiliser les 2 approches sur une même fonction :

1
2
3
function searchUserById(userId: number): User {
// ...
}
Typage de fonction complet

Les classes

Déclarer une classe

En TypeScript, pour déclarer une classe vous devez utiliser le mot-clé class, suivi du nom de la classe et les accolades.

1
class MyNewClass {}
Déclaration de classe

Déclarer des attributs

Voici comment déclarer les attributs de vos classes. De manière facultative, vous pouvez choisir de les typer :

1
2
3
4
class MyNewClass {
  x: number;
  y: number;
}
Déclaration d'attributs

Par ailleurs, vous pouvez aussi donner une valeur initiale à l'attribut comme ceci :

1
2
3
4
class MyNewClass {
  x: number = 0;
  y: number = 2;
}
Initialisation des attributs d'une classe

Implicitement, les attributs sont accessibles publiquement et vous pouvez donc y accéder en dehors de la classe pour modifier leur valeur.

Les interfaces

L'interface vous permet de typer un objet sans avoir à utiliser de classe et à gérer des instances.

Elle peut aussi vous pemettre de contraindre une classe en implémentant une interface.

Exemple :

1
2
3
4
5
6
interface Exemple {
  a: string;
  b: number;
  c: any;
}
let obj: Exemple = {a: 'Hello', b: 12, c: {test: 'hello'}};
Exemple d'interface

Dans cet exemple, obj est typé Exemple (qui est une interface) et donc obj doit contenir obligatoirement une propriété a de type string, une propriété b de type number et une propriété c de n'importe quel type (any).

À savoir : Après compilation TypeScript, la classe reste présente dans l'exécutable. Elle consommera donc des ressources, contrairement à l'interface qui elle, disparait complètement après compilation.

Conclusion

Voilà pour cette introduction à Typescript, retenez que ce langage est un ajout des fonctionnalités de typage manquantes à JavaScript. TypeScript nous donne tous les outils pour produire un code correct et maintenable, n'hésitez pas à creuser le sujet !

J'espère que cet article vous a plu, n'hésitez pas à laisser un commentaire si vous avez des idées d'amélioration.

Auteur

image auteur
Lucas BENTO-VERSACE Alternant chez Codewise / Étudiant en développement web lucas.bentoversace@ynov.com
"Alternant chez Codewise, passioné par l'informatique et les technologies depuis mon plus jeune âge. J'ai découvert le monde du web et depuis je ne m'en lasse pas ! Fan de jeux vidéos, de sports et de musiques. "