Recherche…


Introduction

Si vous trouvez que les arguments pour les systèmes de caractères sont convaincants en général, alors vous serez satisfait de TypeScript.

Il apporte de nombreux avantages de type système (sécurité, lisibilité, outils améliorés) à l’écosystème JavaScript. Il souffre également de certains inconvénients des systèmes de types (complexité et caractère incomplet).

Remarques

Les mérites des langages typés et non typés ont été débattus pendant des décennies. Les arguments pour les types statiques incluent:

  1. Sécurité: les systèmes de type permettent de détecter de nombreuses erreurs sans exécuter le code. TypeScript peut être configuré pour permettre moins d'erreurs de programmation
  2. Lisibilité: les types explicites facilitent la compréhension du code par l’homme. Comme Fred Brooks l’a écrit : «Montrez-moi vos organigrammes et cachez vos tables, et je continuerai à être mystifié. Montrez-moi vos tables et je n’aurai pas besoin de vos organigrammes, elles seront évidentes.
  3. Tooling: les systèmes de type facilitent la compréhension du code par les ordinateurs. Cela permet aux outils comme les IDE et les linters d'être plus puissants.
  4. Performances: les systèmes de types accélèrent le code en réduisant le besoin de vérifier le type à l'exécution.

La sortie de TypeScript étant indépendante de ses types , TypeScript n'a aucun impact sur les performances. L'argument pour utiliser TypeScript repose sur les trois autres avantages.

Les arguments contre les systèmes de type incluent:

  1. Complexité ajoutée: les systèmes de type peuvent être plus complexes que le langage d'exécution qu'ils décrivent. Les fonctions d'ordre supérieur peuvent être faciles à mettre en œuvre correctement mais difficiles à taper . Traiter les définitions de type crée des obstacles supplémentaires à l'utilisation de bibliothèques externes.
  2. Ajout de verbosité: les annotations de type peuvent ajouter du code à la chaîne, rendant la logique sous-jacente plus difficile à suivre.
  3. Itération plus lente: en introduisant une étape de construction, TypeScript ralentit le cycle d'édition / sauvegarde / rechargement.
  4. Incomplétude: Un système de type ne peut pas être à la fois sain et complet. Il existe des programmes corrects que TypeScript ne permet pas. Et les programmes acceptés par TypeScript peuvent toujours contenir des bogues. Un système de type ne réduit pas le besoin de tests. Si vous utilisez TypeScript, vous devrez peut-être attendre plus longtemps pour utiliser les nouvelles fonctionnalités du langage ECMAScript.

TypeScript offre des moyens de résoudre tous ces problèmes:

  1. Complexité supplémentaire Si tapant une partie d'un programme est trop difficile, tapuscrit peut être largement désactivé à l' aide d' un opaque any genre. La même chose est vraie pour les modules externes.
  2. Ajout de verbosité. Cela peut être partiellement traité par des alias de type et la capacité de TypeScript à déduire des types. Ecrire du code clair est autant un art qu'une science: enlevez trop d'annotations de type et le code risque de ne plus être clair pour les lecteurs humains.
  3. Itération lente: une étape de construction est relativement courante dans le développement JS moderne et TypeScript s'intègre déjà à la plupart des outils de construction . Et si TypeScript détecte une erreur à un stade précoce, il peut vous faire économiser tout un cycle d'itération!
  4. Incomplétude Bien que ce problème ne puisse pas être complètement résolu, TypeScript a été capable de capturer de plus en plus de modèles JavaScript expressifs. Des exemples récents incluent l'ajout de types mappés dans TypeScript 2.1 et les mixins dans 2.2 .

Les arguments pour et contre les systèmes de type en général s'appliquent également à TypeScript. L'utilisation de TypeScript augmente le temps nécessaire pour démarrer un nouveau projet. Mais avec le temps, au fur et à mesure que le projet augmente de taille et gagne plus de contributeurs, l’espoir est que les avantages de l’utilisation (sécurité, lisibilité, outillage) deviennent plus forts et l'emportent sur les inconvénients. Cela se reflète dans la devise de TypeScript: "JavaScript qui évolue".

sécurité

TypeScript intercepte les erreurs de type au début de l'analyse statique:

function double(x: number): number {
  return 2 * x;
}
double('2');
//     ~~~ Argument of type '"2"' is not assignable to parameter of type 'number'.

Lisibilité

TypeScript permet aux éditeurs de fournir une documentation contextuelle:

Autocomplétion contextuelle pour la méthode de tranche de chaîne

Vous n'oublierez jamais si String.prototype.slice prend (start, stop) ou (start, length) nouveau!

Outillage

TypeScript permet aux éditeurs d'effectuer des refactorisations automatisées qui connaissent les règles des langages.

Un symbole étant renommé, mais seulement dans sa propre portée

Ici, par exemple, Visual Studio Code est capable de renommer des références au foo interne sans modifier le foo externe. Cela serait difficile à faire avec un simple find / replace.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow