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,
...
}
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
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)