DEV Community

Fabien
Fabien

Posted on • Edited on

Interface et type quand les utiliser ?

La différence entre interface et type dans TypeScript est assez difficile à cerner et c'est normal ! Ils sont tellement similaires, qu'il est possible de les interchanger sans que ça ne soit problématique.


Alors quand utiliser l'un et quand utiliser l'autre ?

Cela dépend de vous, il n'y a pas de règle bien définie.

Le seul conseil valable serait de bien définir les conventions d'usage que vous souhaitez mettre en place dans vos projets et de les respecter.


🤜 Une petite note en passant, on parle de type mais ça n'est pas tout à fait correcte, ce que nous créons est un alias de type.

Un exemple simple qui permettrait de mieux comprendre serait de définir un alias de type qui correspondrait à un type primitif (string, boolean, number, ...)

type MonAliasDeType = string;

type MonAutreAliasDeType = {
   maPropriete: MonAliasDeType,
   ...
}
Enter fullscreen mode Exit fullscreen mode

Nous faisons référence à un type.


Mon point de vue

Personnellement j'ai beaucoup utilisé les interfaces, tellement, qu'il était très rare que j'en vienne à utiliser les types.

Mais après avoir feuilleté la documentation TypeScript, lu quelques articles et révisé mes cours, j'ai maintenant une idée plus claire des subtilités de chacun d’eux.

les types ne sont pas ouverts, c'est à dire qu'ils ne peuvent pas être modifiés après avoir été définis.

Contrairement aux interfaces qui, quant à elles, permettent la fusion, c'est à dire que si l'on déclare deux fois, ou plus, une interface avec le même nom, ça ne sera pas considéré comme une erreur et aura pour effet de fusionner les interfaces.

interface MonInterface {
  a: string;
}

interface MonInterface {
  b: string;
}

let maVariable: MonInterface;

maVariable.a
maVariable.b
Enter fullscreen mode Exit fullscreen mode

A utiliser les interfaces on prendrait donc le risque de fusionner celles qui ont le même nom. Même si ça ne semble pas être un problème courant, il serait possible de fusionner des interfaces sans s'en rendre compte.

type, quant à lui, retournera une erreur.

type a aussi l'avantage de proposer plus possibilités pour décrire le format des données, voir les Discriminated Types (|) et les Intersection types (&).

Comment choisir ?

J'utilise type par défaut et les interfaces dans les cas suivants :

  • Pour ajouter des propriétés à une interface globale, comme celle de Window
  • Dans les librairies pour qu'elles puissent être surchargées

Sur ce, bon dev ;-)

Top comments (0)