TypeScript - TypeScript

Manuscrit
Logo dactylographié 2020.svg
Paradigme Multi-paradigme : fonctionnel , générique , impératif , orienté objet
Conçu par Microsoft
Développeur Microsoft
Première apparition 1er octobre 2012 ; il y a 8 ans ( 2012-10-01 )
Version stable
4.2.4  Modifiez ceci sur Wikidata / 9 avril 2021 ; Il ya 4 mois ( 9 avril 2021 )
Version préliminaire
4.3 Bêta  Modifiez ceci sur Wikidata / 9 avril 2021 ; Il ya 4 mois ( 9 avril 2021 )
Discipline de frappe Canard , progressif , structurel
Licence Licence Apache 2.0
Extensions de nom de fichier .ts, .tsx
Site Internet www .typescriptlang .org
Influencé par
C# , Java , Javascript
Influencé
AtScript , AssemblyScript

TypeScript est un langage de programmation développé et maintenu par Microsoft . Il s'agit d'un sur - ensemble syntaxique strict de JavaScript et ajoute un typage statique facultatif au langage. TypeScript est conçu pour le développement de grandes applications et transcompile en JavaScript. Comme TypeScript est un sur-ensemble de JavaScript, les programmes JavaScript existants sont également des programmes TypeScript valides.

Tapuscrit peut être utilisé pour développer des applications JavaScript pour les deux côté client et côté serveur d' exécution (comme avec Node.js ou Deno ). Plusieurs options sont disponibles pour la transcompilation. Soit le vérificateur de TypeScript par défaut peut être utilisé, soit le compilateur Babel peut être invoqué pour convertir TypeScript en JavaScript.

TypeScript prend en charge les fichiers de définition qui peuvent contenir des informations de type de bibliothèques JavaScript existantes, tout comme les fichiers d'en-tête C++ peuvent décrire la structure des fichiers objets existants . Cela permet à d'autres programmes d'utiliser les valeurs définies dans les fichiers comme s'il s'agissait d'entités TypeScript de type statique. Il existe des fichiers d'en-tête tiers pour les bibliothèques populaires telles que jQuery , MongoDB et D3.js . Des en-têtes TypeScript pour les modules de base Node.js sont également disponibles, permettant le développement de programmes Node.js au sein de TypeScript.

Le compilateur TypeScript est lui-même écrit en TypeScript et compilé en JavaScript. Il est sous licence Apache License 2.0 . TypeScript est inclus en tant que langage de programmation de première classe dans Microsoft Visual Studio 2013 Update 2 et versions ultérieures, aux côtés de C# et d'autres langages Microsoft. Une extension officielle permet à Visual Studio 2012 de prendre également en charge TypeScript. Anders Hejlsberg , architecte principal de C# et créateur de Delphi et Turbo Pascal , a travaillé sur le développement de TypeScript.

Histoire

TypeScript a été rendu public pour la première fois en octobre 2012 (à la version 0.8), après deux ans de développement interne chez Microsoft. Peu de temps après l'annonce, Miguel de Icaza a fait l'éloge du langage lui-même, mais a critiqué le manque de support IDE mature en dehors de Microsoft Visual Studio , qui n'était pas disponible sur Linux et OS X à l'époque. Depuis avril 2021, d'autres IDE et éditeurs de texte sont pris en charge, notamment Emacs , Vim , Webstorm , Atom et le propre Visual Studio Code de Microsoft .

TypeScript 0.9, sorti en 2013, a ajouté la prise en charge des génériques. TypeScript 1.0 a été publié lors de la conférence des développeurs Microsoft Build en 2014. Visual Studio 2013 Update 2 fournit une prise en charge intégrée de TypeScript.

En juillet 2014, l'équipe de développement a annoncé un nouveau compilateur TypeScript, revendiquant des gains de performances 5x. Simultanément, le code source, initialement hébergé sur CodePlex , a été déplacé vers GitHub .

Le 22 septembre 2016, TypeScript 2.0 est sorti ; il a introduit plusieurs fonctionnalités, notamment la possibilité pour les programmeurs d'empêcher éventuellement l'attribution de nullvaleurs aux variables , parfois appelée erreur d'un milliard de dollars .

TypeScript 3.0 a été publié le 30 juillet 2018, apportant de nombreux ajouts de langage tels que des tuples dans les paramètres de repos et des expressions de propagation, des paramètres de repos avec des types de tuple, des paramètres de repos génériques, etc.

TypeScript 4.0 a été publié le 20 août 2020. Bien que la version 4.0 n'ait introduit aucune modification majeure, elle a ajouté des fonctionnalités de langage telles que les usines JSX personnalisées et les types de tuples variadiques.

Concevoir

TypeScript est né des lacunes de JavaScript pour le développement d'applications à grande échelle à la fois chez Microsoft et chez leurs clients externes. Les défis liés au traitement du code JavaScript complexe ont conduit à une demande d'outils personnalisés pour faciliter le développement de composants dans le langage.

Les développeurs de TypeScript recherchaient une solution qui ne romprait pas la compatibilité avec la norme et sa prise en charge multiplateforme. Sachant que la proposition de norme ECMAScript actuelle promettait une prise en charge future de la programmation basée sur les classes , TypeScript était basé sur cette proposition. Cela a conduit à un compilateur JavaScript avec un ensemble d'extensions de langage syntaxique, un sur-ensemble basé sur la proposition, qui transforme les extensions en JavaScript normal. En ce sens, TypeScript était un aperçu de ce à quoi s'attendre d'ECMAScript 2015. Un aspect unique non dans la proposition, mais ajouté à TypeScript, est le typage statique facultatif qui permet l'analyse statique du langage, ce qui facilite la prise en charge de l'outillage et de l'IDE.

Prise en charge d'ECMAScript 2015

TypeScript ajoute la prise en charge de fonctionnalités telles que les classes, les modules et une syntaxe de fonction de flèche telle que définie dans la norme ECMAScript 2015.

Caractéristiques

TypeScript est une extension de langage qui ajoute des fonctionnalités à ECMAScript 6. Les fonctionnalités supplémentaires incluent :

Les fonctionnalités suivantes sont rétroportées à partir d'ECMAScript 2015 :

D'un point de vue syntaxique, TypeScript est très similaire à JScript .NET , une autre implémentation Microsoft de la norme de langage ECMA-262 qui a ajouté la prise en charge du typage statique et des fonctionnalités classiques du langage orienté objet telles que les classes, l'héritage, les interfaces et les espaces de noms.

Compatibilité avec JavaScript

TypeScript est un sur-ensemble strict d' ECMAScript 2015, qui est lui-même un sur-ensemble d'ECMAScript 5, communément appelé JavaScript. En tant que tel, un programme JavaScript est également un programme TypeScript valide, et un programme TypeScript peut utiliser JavaScript de manière transparente. Par défaut, le compilateur cible ECMAScript 5, la norme actuelle en vigueur, mais est également capable de générer des constructions utilisées dans ECMAScript 3 ou 2015.

Avec TypeScript, il est possible d'utiliser du code JavaScript existant, d'incorporer des bibliothèques JavaScript populaires et d'appeler du code généré par TypeScript à partir d'autres JavaScript. Les déclarations de type pour ces bibliothèques sont fournies avec le code source.

Tapez les annotations

TypeScript fournit un typage statique via des annotations de type pour permettre la vérification de type au moment de la compilation . Ceci est facultatif et peut être ignoré pour utiliser le typage dynamique régulier de JavaScript.

function add(left: number, right: number): number {
	return left + right;
}

Les annotations pour les types primitifs sont number, booleanet string. Typescript prend également en charge les types de données avec les annotations suivantes Array, Enums, void.

Les types de données nouvellement introduits sont : Tuple, Union, neveret any. Un tableau avec des types de données prédéfinis à chaque index est Tupletype. Une variable qui contient plus d'un type de données est Uniontype. Lorsque vous êtes sûr que quelque chose ne se produira jamais, vous utilisez le nevertype. Les structures faiblement ou dynamiquement typées sont de anytype.

Les annotations de type peuvent être exportées vers un fichier de déclarations distinct pour rendre les informations de type disponibles pour les scripts TypeScript utilisant des types déjà compilés en JavaScript. Des annotations peuvent être déclarées pour une bibliothèque JavaScript existante, comme cela a été fait pour Node.js et jQuery .

Le compilateur TypeScript utilise l' inférence de type pour déduire les types lorsque les types ne sont pas fournis. Par exemple, la addméthode dans le code ci-dessus serait déduite comme renvoyant un numbermême si aucune annotation de type de retour n'avait été fournie. Ceci est basé sur les types statiques de leftet rightbeing numbers, et la connaissance du compilateur que le résultat de l'ajout de deux numbersest toujours un number. Cependant, déclarer explicitement le type de retour permet au compilateur de vérifier l'exactitude.

Si aucun type ne peut être déduit en raison d'un manque de déclarations, alors il s'agit par défaut du anytype dynamique . Une valeur du anytype prend en charge les mêmes opérations qu'une valeur en JavaScript et une vérification de type statique minimale est effectuée pour les opérations sur les anyvaleurs.

Fichiers de déclaration

Lorsqu'un script TypeScript est compilé, il existe une option pour générer un fichier de déclaration (avec l'extension .d.ts) qui fonctionne comme une interface avec les composants du JavaScript compilé. Au cours du processus, le compilateur supprime tous les corps de fonction et de méthode et ne conserve que les signatures des types exportés. Le fichier de déclaration résultant peut ensuite être utilisé pour décrire les types TypeScript virtuels exportés d'une bibliothèque ou d'un module JavaScript lorsqu'un développeur tiers le consomme à partir de TypeScript.

Le concept de fichiers de déclaration est analogue au concept de fichier d'en-tête que l'on trouve en C/C++ .

declare namespace arithmetics {
    add(left: number, right: number): number;
    subtract(left: number, right: number): number;
    multiply(left: number, right: number): number;
    divide(left: number, right: number): number;
}

Les fichiers de déclaration de type peuvent être écrits à la main pour les bibliothèques JavaScript existantes, comme cela a été fait pour jQuery et Node.js.

De grandes collections de fichiers de déclaration pour les bibliothèques JavaScript populaires sont hébergées sur GitHub dans DefinitelyTyped .

Des classes

TypeScript prend en charge les classes ECMAScript 2015 qui intègrent la prise en charge facultative des annotations de type.

class Person {
    private name: string;
    private age: number;
    private salary: number;

    constructor(name: string, age: number, salary: number) {
        this.name = name;
        this.age = age;
        this.salary = salary;
    }

    toString(): string {
        return `${this.name} (${this.age}) (${this.salary})`; // As of version 1.4
    }
}

Génériques

TypeScript prend en charge la programmation générique . Ce qui suit est un exemple de la fonction d'identité .

function id<T>(x: T): T {
    return x;
}

Modules et espaces de noms

TypeScript fait la distinction entre les modules et les espaces de noms. Les deux fonctionnalités de TypeScript prennent en charge l'encapsulation de classes, d'interfaces, de fonctions et de variables dans des conteneurs. Les espaces de noms (anciennement modules internes) utilisent l'expression de fonction immédiatement appelée de JavaScript pour encapsuler le code, tandis que les modules (anciennement modules externes) exploitent les modèles de bibliothèque JavaScript pour le faire ( AMD ou CommonJS ).

Outils de développement

Compilateur

Le compilateur TypeScript, nommé tsc, est écrit en TypeScript . En conséquence, il peut être compilé en JavaScript normal et peut ensuite être exécuté dans n'importe quel moteur JavaScript (par exemple un navigateur). Le package du compilateur est fourni avec un hôte de script qui peut exécuter le compilateur. Il est également disponible sous forme de package Node.js qui utilise Node.js comme hôte.

La version actuelle du compilateur prend en charge ECMAScript 5 par défaut. Une option est autorisée pour cibler ECMAScript 2015 afin d'utiliser des fonctionnalités de langage exclusives à cette version (par exemple des générateurs). Les classes, bien qu'elles fassent partie de la norme ECMAScript 2015, sont disponibles dans les deux modes.

Prise en charge de l'IDE et de l'éditeur

  • Microsoft fournit un plug-in pour Visual Studio 2012 et WebMatrix , une prise en charge entièrement intégrée dans Visual Studio 2013 , Visual Studio 2015 et une prise en charge de l'éditeur de texte de base pour Emacs et Vim .
  • Visual Studio Code est un éditeur de code source (principalement) open source et multiplateforme développé par Microsoft basé sur Electron . Il prend en charge TypeScript en plus de plusieurs autres langages et offre des fonctionnalités telles que le débogage et la complétion de code intelligente .
  • alm.tools est un IDE cloud open source pour TypeScript construit à l'aide de TypeScript, ReactJS et TypeStyle.
  • JetBrains prend en charge TypeScript avec la complétion de code, la refactorisation et le débogage dans ses IDE construits sur la plate-forme IntelliJ, tels que PhpStorm 6, WebStorm 6 et IntelliJ IDEA , ainsi que leur complément et extension Visual Studio, ReSharper 8.1.
  • Atom dispose d'un plugin TypeScript de Basarat avec prise en charge de la complétion de code, de la navigation, du formatage et de la compilation rapide.
  • L' IDE Cloud9 en ligne et Codenvy prennent en charge TypeScript.
  • Un plugin est disponible pour l' IDE NetBeans .
  • Un plugin est disponible pour l' IDE Eclipse (version Kepler)
  • TypEcs est disponible pour l' IDE Eclipse .
  • Le Cross Platform Cloud IDE Codeanywhere prend en charge TypeScript.
  • Webclipse Un plugin Eclipse conçu pour développer TypeScript et Angular 2 .
  • Angular IDE Un IDE autonome disponible via npm pour développer des applications TypeScript et Angular 2, avec prise en charge de terminal intégrée.
  • Tide – Environnement de développement interactif TypeScript pour Emacs .

Intégration avec les outils d'automatisation de la construction

À l'aide de plug-ins , TypeScript peut être intégré à des outils d' automatisation de construction , notamment Grunt (grunt-ts), Apache Maven (TypeScript Maven Plugin), Gulp (gulp-typescript) et Gradle (TypeScript Gradle Plugin).

Outils de peluchage

TSLint scanne le code TypeScript pour la conformité à un ensemble de normes et de directives. ESLint , un linter JavaScript standard, a également fourni une prise en charge de TypeScript via des plugins communautaires. Cependant, l'incapacité d'ESLint à tirer parti des services linguistiques de TypeScript a empêché certaines formes de linting sémantique et d'analyse à l'échelle du programme. Début 2019, l'équipe TSLint a annoncé l'abandon de linter en faveur de typescript-eslint, un effort conjoint des équipes TSLint, ESLint et TypeScript pour consolider le linting sous l'égide d'ESLint pour améliorer les performances, l'unité de la communauté et l'accessibilité des développeurs. Pour utiliser TypeScript avec ESLint, vous devez ajouter le @typescript-eslint/eslint-pluginet @typescript-eslint/parser.

Historique des versions

Numéro de version Date de sortie Changements importants
0,8 1 octobre 2012 ( 2012-10-01 )
0,9 18 juin 2013 ( 2013-06-18 )
1,0 12 avril 2014 ( 2014-04-12 )
1.1 6 octobre 2014 ( 2014-10-06 ) Amélioration des performances
1.3 12 novembre 2014 ( 2014-11-12 ) protected modificateur, types de tuples
1.4 20 janvier 2015 ( 2015-01-20 ) types syndicaux , letet les constdéclarations, les chaînes de modèle, les gardes de type, alias de type
1.5 20 juillet 2015 ( 2015-07-20 ) Modules ES6, namespacemot - clé, for..ofsupport, décorateurs
1.6 16 septembre 2015 ( 2015-09-16 ) Prise en charge de JSX, types d'intersection , déclarations de type local, classes et méthodes abstraites , fonctions de protection de type définies par l'utilisateur
1.7 30 novembre 2015 ( 2015-11-30 ) asyncet awaitsoutien,
1,8 22 février 2016 ( 2016-02-22 ) contraintes génériques, erreurs d'analyse de flux de contrôle, types de littéraux de chaîne, allowJs
2.0 22 septembre 2016 ( 2016-09-22 ) types prenant en charge les valeurs nulles et non définies, analyse de type basée sur le flux de contrôle, types d'union discriminés, nevertype, readonlymot-clé, type de thispour les fonctions
2.1 8 novembre 2016 ( 2016-11-08 ) keyof et types de recherche, types mappés, propagation et repos d'objets,
2.2 22 février 2017 ( 2017-02-22 ) classes de mélange, objecttype,
2.3 27 avril 2017 ( 2017-04-27 ) async itération, valeurs par défaut des paramètres génériques, option stricte
2.4 27 juin 2017 ( 2017-06-27 ) expressions d'importation dynamiques, énumérations de chaînes, inférence améliorée pour les génériques, contravariance stricte pour les paramètres de rappel
2.5 31 août 2017 ( 2017-08-31 ) variables de clause catch facultatives
2.6 31 octobre 2017 ( 2017-10-31 ) types de fonctions strictes
2.7 31 janvier 2018 ( 2018-01-31 ) propriétés à nom constant, tuples de longueur fixe
2.8 27 mars 2018 ( 2018-03-27 ) types conditionnels, améliorés keyofavec les types d'intersection
2.9 14 mai 2018 ( 2018-05-14 ) prise en charge des symboles et des littéraux numériques dans les types d'objet keyof et mappé
3.0 30 juillet 2018 ( 2018-07-30 ) références de projet, extraction et diffusion de listes de paramètres avec des tuples
3.1 27 septembre 2018 ( 2018-09-27 ) types de tuple et de tableau mappables
3.2 30 novembre 2018 ( 2018-11-30 ) vérification plus stricte de la liaison, de l'appel et de l'application
3.3 31 janvier 2019 ( 2019-01-31 ) règles assouplies sur les méthodes de types d'union, builds incrémentiels pour les projets composites
3.4 29 mars 2019 ( 2019-03-29 ) constructions incrémentielles plus rapides, inférence de type à partir de fonctions génériques, modificateur en lecture seule pour les tableaux, assertions const, vérification de type globale this
3.5 29 mai 2019 ( 2019-05-29 ) constructions incrémentielles plus rapides, omission du type d'assistant, vérifications améliorées des propriétés en excès dans les types d'union, vérification plus intelligente des types d'union
3.6 28 août 2019 ( 2019-08-28 ) Générateurs plus stricts, répartition des tableaux plus précise, meilleure prise en charge d'Unicode pour les identifiants
3.7 5 novembre 2019 ( 2019-11-05 ) Chaînage en option, coalescence nulle
3.8 20 février 2020 ( 2020-02-20 ) Importations et exportations de type uniquement, champs privés ECMAScript, attente de niveau supérieur
3.9 12 mai 2020 ( 2020-05-12 ) Améliorations de l'inférence, améliorations de la vitesse
4.0 20 août 2020 ( 2020-08-20 ) Types de tuple variadiques, éléments de tuple étiquetés
4.1 19 novembre 2020 ( 2020-11-19 ) Types littéraux de modèle, remappage de clé dans les types mappés, types conditionnels récursifs
4.2 25 février 2021 ( 2021-02-25 ) Préservation plus intelligente des alias de type, éléments de repos avant/moyen dans les types de tuple, vérifications plus strictes de l' inopérateur, abstractsignatures de construction
4.3 26 mai 2021 Séparer les types d'écriture sur les propriétés overrideet l' --noImplicitOverrideindicateur, les améliorations du type de chaîne de modèle
4.4 26 août 2021 Analyse du flux de contrôle des conditions d'alias et des discriminants, signatures d'index de modèle de chaîne de symboles et de modèles

Voir également

Les références

Citations

Sources

Liens externes