TypeScript pour les nouveaux programmeurs

Félicitations, vous avez choisi TypeScript comme premier langage — déjà une bonne décision !

Vous avez peut-être déjà entendu dire que TypeScript est une “variante” de JavaScript. La relation entre les deux est unique parmi les langages de programmation existants, et étudier cette relation vous permettra de comprendre ce qu’ajoute TypeScript à JavaScript.

Bref historique de JavaScript

JavaScript (aussi connu sous le nom ECMAScript) était à l’origine un simple langage de scripting pour navigateurs. Quand il fut inventé, il était utilisé pour de petits extraits de code dans une page web — aller au-delà d’une douzaine de ligne était inhabituel. De ce fait, les navigateurs exécutaient du code JS assez lentement. Cependant, la popularité de JavaScript grandira avec le temps, et les développeurs web ont commencé à s’en servir pour créer des expériences interactives.

Les développeurs de navigateurs Web répondirent à cette croissance de fréquence d’usage en optimisant les environnements d’exécution (compilation dynamique) et en élargissant le champ du possible avec JS (en ajoutant des APIs). Cela contribua à un usage encore plus répandu parmi les développeurs web. Un site web moderne, de nos jours, contient des centaines de milliers de lignes de code. Ceci est en phase avec la façon dont le web a grandi, partant d’un simple ensemble de pages statiques, pour devenir une plateforme d’applications riches pour tout et sur tout.

De plus, le JS est devenu assez populaire pour être utilisé en dehors de navigateurs, Node.js ayant marqué l’implémentation de JS dans un environnement côté serveur. Cette capacité à s’exécuter partout a fait du langage un choix populaire pour le développement d’applications cross-platform. Il y a beaucoup de développeurs dont le stack technique n’est constitué que de JavaScript !

Pour résumer, ce langage a été créé à l’origine pour répondre à des besoins simples, puis a évolué pour supporter l’exécution de millions de lignes. Chaque langage a ses propres points bizarres et surprises, le JS ne faisant pas exception dû à ses débuts :

  • L’opérateur d’égalité (==) convertit ses arguments, conduisant à un comportement bizarre :

    js
    if ("" == 0) {
    // C'est vrai, mais pourquoi ?
    }
    if (1 < x < 3) {
    // C'est vrai peu importe la valeur de x !
    }
  • JavaScript permet l’accès à des propriétés inexistantes :

    js
    const obj = { width: 10, height: 15 };
    const area = obj.width * obj.heigth;
    // Bonne chance pour savoir pourquoi "area" est égale à NaN

La plupart des langages lanceraient une erreur lors de ces situations. Certains le font à la compilation — avant l’exécution de quoi que ce soit. Cette absence d’erreurs et ses mauvaises surprises sont gérables pour de petits programmes, mais beaucoup moins à l’échelle d’une grande application.

TypeScript : un vérificateur statique de types

Nous disions que certains langages interdiraient l’exécution de code erroné. La détection d’erreurs dans le code sans le lancer s’appelle la vérification statique. La distinction entre ce qui est une erreur de ce qui ne l’est pas, en partant des valeurs avec lesquelles on travaille, s’appelle la vérification statique de types.

TypeScript vérifie les erreurs d’un programme avant l’exécution, et fait cela en se basant sur les types de valeurs, c’est un vérificateur statique. Par exemple, l’exemple ci-dessus avait une erreur à cause du type d’obj :

ts
const obj = { width: 10, height: 15 };
const area = obj.width * obj.heigth;
Property 'heigth' does not exist on type '{ width: number; height: number; }'. Did you mean 'height'?2551Property 'heigth' does not exist on type '{ width: number; height: number; }'. Did you mean 'height'?
Try

Une surcouche typée de JavaScript

Quel est le rapport entre JavaScript et TypeScript ?

Syntaxe

TypeScript est une surcouche de JavaScript : une syntaxe JS légale est donc une syntaxe TS légale. La syntaxe définit la façon dont on écrit un programme. Par exemple, ce code a une erreur de syntaxe parce qu’il manque un ) :

ts
let a = (4
')' expected.1005')' expected.
Try

TypeScript ne considère pas forcément du code JavaScript comme du code invalide. Cela signifie que vous pouvez prendre du code JavaScript fonctionnel et le mettre dans un fichier TypeScript sans vous inquiéter de comment il est écrit exactement.

Types

Cependant, TypeScript est une surcouche typée. Cela veut dire que TS ajoute des règles régissant comment différents types de valeurs peuvent être utilisés. L’erreur à propos de obj.heigth n’est pas une erreur de syntaxe : c’est une erreur où l’on a utilisé une sorte de valeur (un type) de façon incorrecte.

Autre exemple, ce code JavaScript que vous pouvez lancez dans votre navigateur. Il va afficher une valeur :

js
console.log(4 / []);

Ce programme - dont la syntaxe est correcte - affiche Infinity. Mais TypeScript considère que la division d’un nombre par un tableau ne fait pas sens, et va lancer une erreur :

ts
console.log(4 / []);
The right-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.2363The right-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.
Try

Il se peut que vous vouliez vraiment diviser un nombre par un tableau, peut-être juste pour voir le résultat, mais la plupart du temps, vous avez fait une erreur. Le vérificateur de types de TS est conçu pour accepter les programmes valides, tout en signalant le plus d’erreurs communes possibles. (Nous apprendrons plus tard divers paramètres pour contrôler à quel point vous voulez que TS soit strict avec votre code.)

En migrant du code JavaScript vers un fichier TypeScript, il se peut que vous voyiez des erreurs de type en fonction de la façon avec laquelle il a été écrit. Il se peut qu’il y ait de vrais problèmes avec votre code, tout comme il se peut que TypeScript soit trop strict. À travers ce guide, nous montrerons comment ajouter de la syntaxe TypeScript pour éliminer ces erreurs.

Comportement à l’exécution

TypeScript est aussi un langage qui préserve le comportement à l’exécution de JavaScript. Par exemple, la division par 0 produit Infinity au lieu de lancer une erreur. TypeScript, par principe, ne change jamais le comportement de code JS.

Cela veut dire que si vous déplacez du code de JavaScript à TypeScript, il est garanti de s’exécuter de la même façon, même si TS pense qu’il comporte des erreurs liées aux types.

La conservation du comportement à l’exécution est l’un des principes fondamentaux de TypeScript parce que cela signifie que vous pouvez facilement alterner entre les deux langages sans vous inquiéter de différences subtiles qui empêcheraient votre programme de se lancer.

Effacement de types

Grossièrement, une fois que le compilateur de TypeScript a fini de vérifier le code, il efface les types pour laisser le code résultant. Cela signifie qu’à la fin du processus de compilation, le code JS ne conserve aucune information de types.

Cela signifie aussi que TypeScript, en se basant sur les types présents dans le code, n’altère jamais le comportement du programme.

Pour résumer, même si vous pouvez avoir des erreurs de type lors de la compilation, le système de types n’affecte aucunement la façon dont votre programme s’exécute.

Enfin, TypeScript ne fournit aucune librairie supplémentaire. Vos programmes utiliseront les mêmes librairies standard ou externes que vos programmes JS, il n’y a donc aucun framework additionnel à apprendre au niveau de TS.

Il est intéressant de noter qu’il est possible de préciser la version de JavaScript que TypeScript doit cibler lors de la compilation. Cela affecte le code final, qui contiendra ou non des polyfills (du code qui redéfinit des fonctionnalités existantes dans une version de JavaScript mais absentes dans une autre).

Apprendre JavaScript et TypeScript

Une question souvent posée est “Est-ce que je dois apprendre TypeScript ou JavaScript”, à laquelle on répond qu’il n’est pas possible d’apprendre le TS sans apprendre le JS.

TypeScript possède la même syntaxe, et se comporte de la même façon que JavaScript, donc vous pourrez utiliser tout ce que vous apprenez avec JavaScript, dans TypeScript.

Il y a beaucoup, beaucoup de ressources disponibles pour apprendre le JavaScript. Ces ressources ne doivent pas être ignorées si vous voulez apprendre TypeScript. Par exemple, il y a à peu près 20 fois plus de questions StackOverflow taggées javascript que typescript, mais toutes les questions javascript s’appliquent aussi à TypeScript.

Si vous recherchez quelque chose comme “comment trier un tableau en TypeScript”, souvenez-vous : TypeScript est du JavaScript avec un vérificateur de types à la compilation. La façon dont vous triez un tableau en JavaScript est la même qu’en TypeScript. Si vous trouvez une ressource qui utilise TypeScript, ce n’est pas plus mal, mais ne croyez pas que vous avez besoin de réponses spécifiques à TS pour des tâches JS de tous les jours.

Prochaines étapes

C’était un bref résumé des syntaxes et outils utilisés dans le TypeScript de tous les jours. À partir de là, vous pourrez :

The TypeScript docs are an open source project. Help us improve these pages by sending a Pull Request

Contributors to this page:
  (6)

Last updated: 18 avr. 2024