TypeScript Tutoriel : Qu’est-ce qu’une interface, une énumération ou un tableau ?

⚡ Résumé intelligent

TypeScript est un sur-ensemble fortement typé de JavaScript compilé en texte brut JavaCe script ajoute des classes, des interfaces, des énumérations, des modules et des espaces de noms. Cet article traite de l'installation, des variables, des types, des tableaux, des classes, des modificateurs d'accès, des interfaces, des fonctions, des énumérations, des modules et des déclarations d'environnement.

  • 🧬 Relation linguistique : Chaque valide JavaLe programme de script est valide TypeScriptet le compilateur émet du code simple JavaScript pour toute version cible.
  • (I.e. Statiqueping: Une variable conserve le type indiqué lors de sa déclaration ; une incompatibilité est donc signalée à la compilation plutôt qu’à l’exécution.
  • 🧱 Orientation objet : Les classes, l'héritage et les modificateurs public, private et protected apportent une structure familière au code du navigateur.
  • (I.e. Interfaces: Une interface définit une interfacetracl'ensemble des propriétés et méthodes qu'une variable, une fonction ou une classe doit satisfaire.
  • (I.e. Énumérations : Les ensembles de constantes nommées sont compilés en fonctions auto-invoquées, car JavaLe script ne possède pas de type énuméré natif.
  • 📦 Modules: L'exportation et l'importation conservent les déclarations locales à un fichier et évitent les conflits de noms globaux.
  • ???? Déclarations ambiantes : Un fichier .d.ts décrit une tierce partie JavaBibliothèque de scripts permettant une vérification des types sans réécriture.

TypeScript Tutoriel

Qu'est-ce que le TypeScript?

TypeScript est un sur-ensemble de JavaScénario. TypeScript est un langage de programmation orienté objet qui prend en charge les classes, les interfaces, et plus encore. C'est un langage open source développé par Microsoft qui compile statiquement le code pour JavaScript. Il peut facilement s'exécuter dans un navigateur ou dans Node.js.

Toutes les dernières fonctionnalités publiées pour ECMAScript sont prises en charge dans TypeScriptet en outre TypeScript possède ses propres fonctionnalités orientées objet telles que les interfaces, les déclarations ambiantes et l'héritage de classes, qui facilitent le développement.ping une application de grande envergure qui serait autrement difficile à développer dans Javascénario.

La relation est unidirectionnelle. Chaque valide JavaLe fichier de script est déjà valide TypeScriptmais l'inverse n'est pas vrai, car les annotations de type n'existent que dans TypeScript et sont effacées lors de la compilation.

Pourquoi utiliser TypeScript?

Voici les principaux avantages de son utilisation TypeScript:

  • Projets importants et complexes dans JavaLes scripts sont difficiles à coder et à maintenir.
  • TypeScript Cela facilite grandement l'organisation du code et permet d'éliminer la plupart des erreurs lors de la compilation plutôt qu'à l'exécution.
  • TypeScript Prend en charge les bibliothèques JS et la documentation API.
  • Il s'agit d'un langage de script à typage optionnel, ce qui permet d'adopter les types progressivement.
  • TypeScript Le code peut être converti en texte brut JavaCode script pour toute cible de navigateur.
  • Il offre une meilleure structuration du code et des techniques de programmation orientée objet.
  • Il permet une meilleure prise en charge des outils de développement, notamment la saisie semi-automatique et la refactorisation sécurisée.
  • Il peut étendre le langage au-delà de la norme, avec des fonctionnalités telles que les décorateurs.

Le principal avantage pratique réside dans la prise en charge par l'éditeur. Le compilateur connaissant la structure de chaque valeur, un éditeur peut renommer une propriété dans l'ensemble d'un projet et signaler chaque occurrence de non-correspondance.

TypeScript Histoire

Passons en revue les étapes importantes de l'histoire de TypeScript:

  • Après deux ans de développement interne chez Microsoft, TypeScript La version 0.9 est sortie en 2013.
  • TypeScript La version 1.0, avec une prise en charge supplémentaire des génériques, a été publiée lors de la conférence Build 2014.
  • En juillet 2014, un nouveau TypeScript Le compilateur arrivé était cinq fois plus rapide que la version précédente.
  • En juillet 2015, la prise en charge des modules ES6, du mot-clé namespace, de for…of et des décorateurs a été ajoutée.
  • En novembre 2016, les types mappés, les types clés et de recherche, ainsi que le repos et la propagation des objets ont été ajoutés.
  • Le 27 mars 2018, des types conditionnels et une fonction keyof améliorée avec des types d'intersection ont été ajoutés.
  • TypeScript La version 5.0, sortie en mars 2023, a modernisé les décorateurs et réduit la taille des emballages.
  • TypeScript La version 6.0 est arrivée en mars 2026 en tant que version finale basée sur JavaCode source du script.
  • TypeScript La version 7.0 déplace le compilateur vers une implémentation Go native, ce qui Microsoft Il semblerait qu'il soit environ dix fois plus rapide que la version 6.0.

Qui utilise TypeScript?

TypeScript n'est plus un choix de niche. Il est à la base de plusieurs outils front-end et back-end parmi les plus utilisés, et la liste ci-dessous indique où un débutant est le plus susceptible de le rencontrer.

  • Angulaire: Le framework Angular est écrit en TypeScriptet le code de l'application devrait également y être écrit.
  • Projets React et Vue : Les deux écosystèmes sont des navires officiels TypeScript Les modèles, et la plupart des thèmes modernes, l'activent par défaut.
  • Côté serveur Node.js : Les frameworks serveur tels que NestJS sont construits autour de TypeScript cours et décorateurs.
  • Outils de l'éditeur : Visual Studio Code est en soi un grand TypeScript Le code source, c'est pourquoi sa prise en charge des langages est si complète.
  • Interfaces utilisateur pour grandes entreprises : Les équipes travaillant avec de nombreux contributeurs l'adoptent pour détecter les erreurs d'intégration avant le déploiement.

Comment télécharger et installer TypeScript

Voici le processus étape par étape pour télécharger et installer TypeScript:

Étape 1) Téléchargez et installez Nodejs

Rendez-vous sur le site officiel de Nodejs, https://nodejs.org/en/download/Téléchargez et installez Node.js pour votre système d'exploitation. Des instructions détaillées sont disponibles dans le guide sur Comment télécharger et installer Node.js.

Étape 2) Vérifiez la version de Nodejs et npm

Pour vérifier si Nodejs et npm sont installés, vérifiez la version dans votre invite de commandes.

D:\typeproject>node --version
v22.14.0

D:\typeproject>npm --version
10.9.2

Toute version LTS actuelle de Node fonctionne. TypeScript Il suffit qu'une version de Node prise en charge soit nécessaire pour exécuter le compilateur.

Étape 3) TypeScript Installation

Créez votre répertoire de projet typeproject\ et exécutez npm init, comme indiqué dans la commande ci-dessous :

npm init

Étape 4) Démarrer l'installation

Cela crée le fichier package.json, qui stockera les dépendances de notre projet.

Une fois terminé, installez TypeScript comme suit:

npm -g install typescript

La commande ci-dessus se chargera de l'installation TypeScript. L'ajout de « -g » à npm install installera TypeScript globalement. L'avantage d'utiliser -g est que vous pourrez utiliser TypeScript tsc Vous pouvez utiliser cette commande depuis n'importe quel répertoire, car elle est installée globalement. Si vous ne souhaitez pas l'installer, vous pouvez également l'utiliser. TypeScript Globalement, utilisez la commande ci-dessous :

npm install --save-dev typescript

Créez un dossier src\ dans le répertoire de votre projet, et à l'intérieur de src\, créez le TypeScript fichier test.ts et écrivez votre code.

Exemple : test.ts

function add(x:number, y:number) {
	return x+y;
}

let sum = add(5,10);
console.log(sum);

Compiler TypeScript coder pour Javascript

Pour compiler le code ci-dessus, utilisez la commande suivante.

If TypeScript est installé globalement, utilisez la commande ci-dessous :

tsc test.ts

If TypeScript est installé localement dans votre projet, vous devez utiliser le chemin d'accès de TypeScript depuis node_modules, comme indiqué, ou exécutez-le via npx :

node_modules\typescript\bin\tsc test.ts

OR

npx tsc test.ts

La commande ci-dessus créera un fichier test.js contenant le code compilé. JavaScénario.

Exemple : test.js

function add(x, y) {
    return x + y;
}
var sum = add(5, 10);
console.log(sum);

Exécution Javascript utiliser Nodejs

Nous allons maintenant exécuter test.js dans Nodejs comme suit :

D:\typeproject\src>node test.js
15

La valeur transmise à console.log est affichée lors de l'exécution de test.js.

Exécution JavaScript dans le navigateur

Exemple :

<html>
<head></head>
<body>
<script type="text/javascript" src="test.js"></script>
</body>
</html>

Exécution Javascript utiliser Nodejs

Compiler TypeScript coder pour Javascript en utilisant la version EcmaScript

TypeScript Il prend en charge toutes les fonctionnalités ECMAScript publiées, et les développeurs peuvent les utiliser lors du développement. Cependant, certaines nouvelles fonctionnalités ne sont pas compatibles avec les navigateurs plus anciens ; il peut donc être nécessaire de compiler avec une version antérieure d’ECMAScript. TypeScript propose des options de compilation qui font exactement cela.

Exemple : test.ts

var addnumbers = (a, b) => {
    return a+b;
}

addnumbers(10, 20);

Pour compiler vers la version ES de votre choix, vous pouvez utiliser l'option target ou t dans votre commande comme suit :

tsc --target ES6  test.ts

OR

tsc -t ES6 test.ts

Par défaut, le compilateur classique utilise ES3 comme cible. Pour la modifier, utilisez la commande ci-dessus.

Pour le moment, nous utiliserons ES6 comme cible :

tsc --target ES6  test.ts

test.ts à test.js

var addnumbers = (a, b) => {
    return a+b;
}

addnumbers(10, 20);

Le code reste inchangé, car la fonction fléchée que vous avez utilisée est une fonctionnalité ES6 et reste inchangée lors de la compilation en ES6.

Par défaut, la cible est ES3, donc sans cible, vous obtenez test.js comme suit :

var addnumbers = function (a, b) {
    return a + b;
};
addnumbers(10, 20);

Ici, la fonction fléchée est donc remplacée par une fonction anonyme normale.

Astuce : Au lieu de passer des options en ligne de commande à chaque fois, exécutez tsc --init pour générer un fichier tsconfig.json. Le compilateur lit ensuite les paramètres target, outDir et strict de ce fichier pour l'ensemble du projet.

Variables dans TypeScript

Variables sont utilisés pour stocker des valeurs, et la valeur peut être une chaîne, un nombre, un booléen ou une expression. Lorsqu'il s'agit de variables dans TypeScript, ils sont semblables à JavascénarioApprenons donc à déclarer des variables et à leur attribuer une valeur. TypeScript.

Les variables ne peuvent pas être utilisées dans le code sans être définies. Pour déclarer une variable, vous pouvez utiliser

var mot-clé,

laisser mot-clé

const mot-clé

Travailler avec des variables dans TypeScript est similaire à JavaScript et utilisateurs familiers avec JavaLe script le trouvera très facilement. Dans le code moderne, laisser et const sont préférés à var, car leur portée de bloc empêche toute une catégorie de bogues.

Déclaration de variables à l'aide de var

syntaxe:

var firstname = "Roy";

Examinons-en quelques-uns. TypeScript des exemples pour comprendre le fonctionnement du mot-clé `var` et la portée des variables déclarées à l'aide de `var` var mot-clé.

Exemple 1:

var k = 1; // variable k will have a global scope

function test() {
    var c = 1; // variable c is local and accessible only inside function test
    return k++;
}

test(); // output as 1
test(); // output as 2
alert(c); // will throw error, Uncaught ReferenceError: c is not defined

Exemple 2:

var t = 0; // variable t is declared in global scope
function test() {
    var t = 10; // t is redeclared inside the function, so changes stay local
    return t;
}
test(); // will return 10
console.log(t); // will console 0

Exemple 3:

var i = 0;
function test() {
    if (i > 0) {
      var t = 1;
    }
    return t;
}

test(); // returns undefined. The if block did not run, yet t is still declared
        // because var declarations are hoisted to the whole function.
i++;    // value of i is incremented
test(); // since i > 0 the if block runs and the value returned is 1

Déclaration de variables à l'aide de let

Le TypeScript la syntaxe de let est la suivante :

syntaxe:

let name = "Roy";

Le fonctionnement du laisser la variable est presque identique à varmais avec une différence importante, que l'exemple ci-dessous illustre.

Exemple :

let i = 1;
function test() {
    if (i > 0) {
	  let t = 1;
    }
    return t;
}

test(); // throws an error: Cannot find name 't'

Le dessus TypeScript L'exemple génère une erreur, mais le même code aurait fonctionné avec le var mot-clé. Variables déclarées à l'aide de laisser Ces variables ne sont disponibles que dans le bloc où elles sont déclarées. Dans cet exemple, la variable `t` n'existe que dans le bloc `if`, et non dans la fonction entière.

Il en va de même à l'intérieur de toute fonction, boucle `for`, boucle `while` ou bloc `switch`. Une variable `let` n'est accessible qu'à l'intérieur de ce bloc ; y faire référence en dehors de celui-ci provoque une erreur. C'est la principale différence entre `var` et `let`.

Déclaration de variables à l'aide de const

Le mot « const » désigne une variable constante. Elle est similaire à la variable « let », à la différence qu'une fois sa valeur assignée, elle ne peut plus être modifiée. Une déclaration de variable constante doit donc être initialisée sur la même ligne.

syntaxe:

const name = "Roy";

Exemple :

const age = "25";
age = "30"; // error: Cannot assign to 'age' because it is a constant

const total; // error: 'const' declarations must be initialized

Utilisez donc `const` lorsque vous savez que la valeur assignée ne sera pas modifiée. Notez que `const` empêche la modification de la liaison, et non la modification de l'objet qu'elle référence.

Tapez dans TypeScript

TypeScript est un langage fortement typé, tandis que JavaLe script ne l'est pas. Une variable dont la valeur est définie comme une chaîne de caractères peut être modifiée en un nombre sans aucun problème. JavaScript. La même chose n'est pas tolérée dans TypeScript. En TypeScriptLe type d'une variable est défini au début du programme et doit le conserver tout au long de l'exécution. Toute modification entraîne une erreur de compilation. JavaScénario.

Voici les types de base :

Type Accepte Exemple de déclaration
nombre Entiers, nombres à virgule flottante et fractions soit a : nombre = 10 ;
string Valeurs textuelles uniquement soit s : chaîne = "bonjour" ;
booléen vrai ou faux seulement soit b : booléen = vrai ;
tout Toute valeur, aucune vérification appliquée soit x : n'importe quel = 123 ;
annuler Absence de valeur de retour fonction f(): void {}

Numéro

Accepte uniquement les entiers, les nombres à virgule flottante, les fractions et les valeurs numériques similaires.

syntaxe:

let a :number = 10;
let marks :number = 150;
let price :number = 10.2;

Voici quelques méthodes importantes qui peuvent être utilisées sur les types numériques :

àFixe() – elle convertira le nombre en chaîne de caractères et conservera le nombre de décimales indiqué à la méthode.

toString () – cette méthode convertira le nombre en chaîne de caractères.

valeur de() – cette méthode rendra la valeur primitive du nombre.

àPrécision() – cette méthode formatera le nombre à une longueur spécifiée.

Exemple : avec toutes les méthodes numériques

let _num :number = 10.345;
_num.toFixed(2);      // "10.35"
_num.valueOf();      // 10.345
_num.toString();     // "10.345"
_num.toPrecision(2); // "10"

Chaîne

Chaîne de caractères : uniquement des valeurs de type chaîne de caractères.

syntaxe:

let str :string = "hello world";

Voici quelques méthodes importantes qui peuvent être utilisées sur les types de chaînes de caractères :

  • scission() – cette méthode divisera la chaîne en un tableau.
  • caractère() – cette méthode renverra le caractère à l'index donné.
  • Indice de() – cette méthode renverra la position de la première occurrence de la valeur qui lui est attribuée.
  • remplacer() – Cette méthode prend deux chaînes de caractères. Elle recherche la première valeur dans la chaîne et, si elle est présente, la remplace par la seconde, renvoyant une nouvelle chaîne.
  • réduire() – cette méthode supprimera les espaces blancs des deux côtés de la chaîne.
  • substr() – cette méthode renverra une partie de la chaîne, en fonction de la position de départ et de la longueur donnée.
  • sous-chaîne() – Cette méthode renvoie une partie de la chaîne, en fonction des positions de début et de fin. Le caractère en position finale est exclu.
  • vers majuscule() – convertira la chaîne en majuscules.
  • en minuscules() – convertira la chaîne en minuscules.

Exemple :

let _str:string = "Typescript";

_str.charAt(1);                // y
_str.split("");                // ["T","y","p","e","s","c","r","i","p","t"]
_str.indexOf("s");             // 4, gives -1 if the value does not exist
_str.replace("Type", "Coffee"); // "Coffeescript"
_str.trim();                    // "Typescript"
_str.substr(4, _str.length);   // "script"
_str.substring(4, 10);         // "script"
_str.toUpperCase();             // "TYPESCRIPT"
_str.toLowerCase();             // "typescript"

Boolean

Un booléen n'accepte que les valeurs logiques vrai et faux. Contrairement aux valeurs logiques simples JavaDans ce script, les chiffres 0 et 1 ne sont pas acceptés, car ils sont de type numérique.

syntaxe:

let status :boolean = true;
let isDone :boolean = false;

let bflag :boolean = 1;
// error: Type 'number' is not assignable to type 'boolean'

Toutes

syntaxe:

let a :any = 123
a = "hello world"; // changing type will not give any error.

Variables déclarées à l'aide de tout Le type peut contenir une chaîne de caractères, un nombre, un tableau, un booléen ou une valeur vide. TypeScript ne générera aucune erreur de compilation, ce qui est similaire aux variables dans JavaScript. N'utilisez le type « any » que lorsque vous n'êtes pas sûr du type de valeur qui sera associé à cette variable, car il désactive toute vérification de cette valeur.

vide

Le type void est principalement utilisé comme type de retour d'une fonction qui ne renvoie rien.

syntaxe:

function testfunc():void{
 //code here
}

TypeScript tableau

An tableau in TypeScript Un tableau est un type de données permettant de stocker plusieurs valeurs. Apprenons à déclarer et à assigner des valeurs pour les opérations sur les tableaux. TypeScript.

Depuis que TypeScript S'agissant d'un langage fortement typé, vous devez spécifier le type de données des valeurs d'un tableau. À défaut, elles seront considérées comme étant de type quelconque.

Déclarer et initialiser un tableau

syntaxe:

let nameofthearray : Array<typehere>

Exemple

let months: Array<string> = ["Jan", "Feb", "March", "April", "May", "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec"]; // array with all string values

let years: Array<number> = [2015, 2016, 2017, 2018, 2019]; // array with all numbers

let month_year: Array<string | number> = ["Jan", 2015, "Feb", 2016]; // mixed

let alltypes: Array<any> = [true, false, "Harry", 2000, { "a": "50", "b": "20" }]; // any type

Différentes façons d'accéder aux éléments d'un tableau

Pour obtenir les éléments d'un tableau, les valeurs commencent à l'indice 0 et vont jusqu'à la longueur du tableau moins un.

let years: Array<number> = [2016, 2017, 2018, 2019];
years[0]; // output will be 2016
years[1]; // output will be 2017
years[2]; // output will be 2018
years[3]; // output will be 2019

Vous pouvez également obtenir les éléments d'un tableau en utilisant un TypeScript pour boucle, comme indiqué ci-dessous.

L'utilisation de TypeScript pour la boucle

let years: Array<number> = [2016, 2017, 2018, 2019];
for (let i = 0; i < years.length; i++) {
     console.log(years[i]);
}

Sortie :

2016
2017
2018
2019

⚠️ Attention : La condition de boucle doit être i < years.length. L'écriture i <= years.length exécute une itération supplémentaire et imprime undefined, car le dernier index valide est toujours égal à la longueur moins un.

Utiliser la boucle for-in

let years: Array<number> = [2016, 2017, 2018, 2019];
for (let i in years) {
     console.log(years[i]);
}

Sortie :

2016
2017
2018
2019

Utiliser la boucle for-of

let years: Array<number> = [2016, 2017, 2018, 2019];
for (let i of years) {
     console.log(i);
}

Sortie :

2016
2017
2018
2019

Utilisation de la boucle forEach

let years: Array<number> = [2016, 2017, 2018, 2019];
years.forEach(function(yrs, i) {
  console.log(yrs);
});

Sortie :

2016
2017
2018
2019

TypeScript Méthodes de tableau

Le TypeScript L'objet tableau possède de nombreuses propriétés et méthodes qui facilitent et optimisent sa manipulation. Vous pouvez obtenir la valeur d'une propriété en spécifiant `nom_du_tableau.propriété`, et le résultat d'une méthode en spécifiant `nom_du_tableau.méthode()`.

Membre Interet Retours de produits
longueur Nombre d'éléments dans le tableau nombre
inverser () Reversel'ordre des éléments en place Le même tableau
sorte() Trie les articles à leur place Le même tableau
populaire() Supprime le dernier élément L'élément supprimé
décalage() Supprime le premier élément L'élément supprimé
pousser() Ajoute une valeur comme dernier élément La nouvelle longueur
concaté() Fusionne deux tableaux en un seul Un nouveau réseau

Exemple de propriété de longueur

let months: Array<string> = ["Jan", "Feb", "March", "April", "May", "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec"];

console.log(months.length);  // 12

Exemple de méthode inverse

console.log(months.reverse());
// ["Dec","Nov","Oct","Sept","Aug","July","June","May","April","March","Feb","Jan"]

Exemple de méthode de tri

console.log(months.sort());
// ["April","Aug","Dec","Feb","Jan","July","June","March","May","Nov","Oct","Sept"]

Exemple de méthode pop

console.log(months.pop()); // Dec

Exemple de méthode de décalage

console.log(months.shift()); // Jan

Exemple de méthode push

let years: Array<number> = [2015, 2016, 2017, 2018, 2019];
console.log(years.push(2020)); // 6, the new length
years.forEach(function(yrs, i) {
  console.log(yrs); // 2015, 2016, 2017, 2018, 2019, 2020
});

Exemple de méthode concat

let array1: Array<number> = [10, 20, 30];
let array2: Array<number> = [100, 200, 300];
console.log(array1.concat(array2)); // [10, 20, 30, 100, 200, 300]

Classe en TypeScript

TypeScript est un sur-ensemble de JavaScript, donc tout ce qui est possible dans JavaLe script est également possible dans TypeScriptLa classe est une fonctionnalité ajoutée à partir d'ES6. Auparavant, JavaUn script, offrant des fonctionnalités similaires à celles d'une classe, a été implémenté grâce à une fonction dotée de méthodes prototypes permettant la réutilisation du code. L'utilisation d'une classe permet à votre code de se rapprocher de celui de langages tels que… Java, C# et Python, où le code est facilement réutilisable.

Définir une classe dans TypeScript

Voici la syntaxe de base des classes dans TypeScript:

class nameofclass {
     //define your properties here

    constructor() {
     // initialize your properties here
    }

   //define methods for class
}

Exemple : un exemple fonctionnel sur Class

class Students {
    age : number;
    name : string;
    roll_no : number;

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

    getRollNo(): number {
        return this.roll_no;
    }

    getName() : string {
        return this.name;
    }

    getAge() : number {
        return this.age;
    }
}

Dans l'exemple ci-dessus, vous avez une classe appelée Students. Elle possède les propriétés age, name et roll_no.

Constructeur dans un TypeScript Classe

La classe Students définie ci-dessus possède un constructeur comme indiqué ci-dessous :

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

La méthode constructeur prend en paramètres l'âge, le nom et le numéro d'étudiant. Le constructeur initialise les propriétés lors de l'instanciation de la classe. On accède aux propriétés via… ceci. Un mot-clé, par exemple `this.age` pour accéder à l'âge et `this.roll_no` pour accéder au numéro d'inscription. Vous pouvez également définir un constructeur par défaut, comme indiqué ci-dessous :

constructor () {}

Méthodes à l'intérieur d'un TypeScript Classe

Dans la classe Students, il existe des méthodes définies, par exemple getRollNo(), getName() et getAge(), qui renvoient les valeurs des propriétés roll_no, name et age.

getRollNo(): number {
        return this.roll_no;
}

getName() : string {
	return this.name;
}

getAge() : number {
	return this.age;
}

Création d'une instance d'une classe dans TypeScript

In TypeScriptPour créer une instance d'une classe, vous utilisez l'opérateur `new`. Lorsque vous créez une instance avec `new`, vous obtenez un objet qui peut accéder aux propriétés et aux méthodes de la classe, comme indiqué ci-dessous :

let student_details = new Students(15, "Harry John", 33);
student_details.getAge();  // 15
student_details.getName(); // Harry John

Compilation d'un TypeScript Classe à Javascénario

Vous pouvez utiliser la commande tsc comme indiqué ci-dessous pour compiler en JavaScénario.

Command: tsc  Students.ts

La sortie du JavaLe code du script compilé est présenté ci-dessous :

var Students = /** @class */ (function () {
    function Students(age, name, roll_no) {
        this.age = age;
        this.name = name;
        this.roll_no = roll_no;
    }
    Students.prototype.getRollNo = function () {
        return this.roll_no;
    };
    Students.prototype.getName = function () {
        return this.name;
    };
    Students.prototype.getAge = function () {
        return this.age;
    };
    return Students;
}());

In JavaDans ce script, la classe est convertie en une fonction auto-invoquée.

Héritage de classe

Les classes peuvent être héritées en utilisant le S'étend mot-clé dans TypeScript.

Syntaxe d'héritage de classe :

class A {
     //define your properties here

    constructor() {
     // initialize your properties here
    }

   //define methods for class

}

class B extends A {
 //define your properties here

    constructor() {
     // initialize your properties here
    }

   //define methods for class

}

classe B je pourrai partager Classe A méthodes et propriétés.

Voici un exemple fonctionnel de classe utilisant l'héritage :

class Person {
    name: string;
    age: number;

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

    getName(): string {
        return this.name;
    }

    getAge(): number {
        return this.age;
    }
}

class Student extends Person {
    tmarks: number;
    getMarks(): number {
        return this.tmarks;
    }

    setMarks(tmarks) {
        this.tmarks = tmarks;
    }
}

let _std1 = new Student('Sheena', 24);
_std1.getAge();      // output is 24
_std1.setMarks(500);
_std1.getMarks();    // output is 500

Vous avez deux classes : Personne et Étudiant. La classe Étudiant hérite de Personne, et l’objet créé à partir de la classe Étudiant peut accéder à ses propres méthodes et propriétés ainsi qu’à celles de la classe dont elle hérite.

Ajoutons maintenant quelques modifications à la classe ci-dessus.

Exemple :

class Person {
    name: string;
    age: number;

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

    getName(): string {
        return this.name;
    }

    getAge(): number {
        return this.age;
    }
}

class Student extends Person {
    tmarks: number;
    constructor(name: string, age: number, tmarks: number) {
        super(name, age);
        this.tmarks = tmarks; // the derived property must be assigned too
    }
    getMarks(): number {
        return this.tmarks;
    }

    setMarks(tmarks) {
        this.tmarks = tmarks;
    }
}

let _std1 = new Student('Sheena', 24, 500);
_std1.getAge();   // output is 24
_std1.getMarks(); // output is 500

La différence par rapport à l'exemple précédent réside dans le constructeur défini dans la classe Student. Ce constructeur prend les mêmes paramètres que la classe de base, ainsi que d'éventuels paramètres supplémentaires qui lui sont propres.

In TypeScript Vous devez appeler `super` avec tous les paramètres de la classe de base. Cet appel doit être la première instruction du constructeur, car `super` exécute le constructeur de la classe dérivée. Toute propriété déclarée par la classe dérivée, comme `tmarks`, doit ensuite être assignée explicitement ; sinon, `getMarks` renverra `undefined`.

Modificateurs d'accès dans TypeScript

TypeScript Ce module prend en charge les modificateurs d'accès public, privé et protégé pour vos méthodes et propriétés. Par défaut, si aucun modificateur d'accès n'est spécifié, la méthode ou la propriété est considérée comme publique et est facilement accessible depuis l'objet de la classe.

Dans le cas des modificateurs d'accès privés, les membres ne sont pas accessibles depuis l'objet de la classe et sont destinés à un usage interne uniquement. Ils ne sont pas accessibles à une classe héritée.

Dans le cas des modificateurs d'accès protégés, les membres sont destinés à être utilisés à l'intérieur de la classe et de la classe héritée, et ne sont pas accessibles depuis l'objet de la classe.

Exemple :

class Person {
    protected name: string;
    protected age: number;

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

    private getName(): string {
        return this.name;
    }

    getDetails(): string {
        return "Name is " + this.getName();
    }
}

class Student extends Person {
    tmarks: number;
    constructor(name: string, age: number, tmarks: number) {
        super(name, age);
        this.tmarks = tmarks;
    }
    getMarks(): number {
        return this.tmarks;
    }

    getFullName(): string {
        return this.name;
    }

    setMarks(tmarks) {
        this.tmarks = tmarks;
    }
}

let _std1 = new Student('Sheena', 24, 500);
_std1.getMarks();    // output is 500
_std1.getFullName(); // output is Sheena
_std1.getDetails();  // output is Name is Sheena
Modifier Même classe Classe dérivée Objet de la classe
public Oui Oui Oui
protégé Oui Oui Non
Privé Oui Non Non

Interface dans TypeScript

L'une des caractéristiques essentielles de TypeScript Les interfaces sont des ensembles de règles que l'entité qui les utilise doit respecter. Cette entité peut être une classe, une fonction ou une variable. Une interface est composée de propriétés et de méthodes. On peut indiquer qu'une propriété ou une méthode est optionnelle en utilisant le symbole « ? ». L'interface impose un typage fort à toute fonction, variable ou classe qui l'implémente.

Syntaxe d'une interface dans TypeScript

interface Dimension {
    width: string;
    height: string;
}

Vous avez défini une interface nommée Dimension qui possède les propriétés width et height, toutes deux de type chaîne de caractères.

Cette interface peut être implémentée par une variable, une fonction ou une classe. Voici un exemple de variable implémentant l'interface Dimension.

Exemple :

interface Dimension {
    width: string;
    height: string;
}

let _imagedim: Dimension = {
    width: "100px",
    height: "200px"
};

La signature de l'interface Dimension comporte une largeur et une hauteur, toutes deux obligatoires. Toute propriété manquante ou tout type modifié entraînera une erreur de compilation. JavaScénario.

Le code ci-dessus, une fois compilé en JavaLe script se présente comme suit :

var _imagedim = {
    width: "100px",
    height: "200px"
};

Voyons maintenant comment utiliser une interface avec une fonction.

Utiliser une interface sur une fonction comme type de retour

interface Dimension {
    width: string;
    height: string;
}

function getDimension() : Dimension {
    let width = "300px";
    let height = "250px";
    return {
        width: width,
        height: height
    }
}

Dans l'exemple ci-dessus, l'interface Dimension est utilisée comme type de retour de la fonction getDimension(). La valeur de retour doit correspondre aux propriétés et aux types déclarés dans l'interface.

Le compilé JavaLe code du script sera le suivant :

function getDimension() {
    var width = "300px";
    var height = "250px";
    return {
        width: width,
        height: height
    };
}

Lors de la compilation, si le type de retour ne correspond pas à l'interface, une erreur sera levée.

Interface en tant que paramètre de fonction

interface Dimension {
    width: string;
    height: string;
}

function getDimension(dim: Dimension) : string {
    let finaldim  = dim.width + "-" + dim.height;
    return finaldim;
}

getDimension({width:"300px", height:"250px"}); // "300px-250px"

Dans l'exemple ci-dessus, vous avez utilisé l'interface Dimension comme paramètre de la fonction getDimension(). Lors de l'appel de cette fonction, le paramètre passé doit respecter les règles définies par l'interface.

Le compilé JavaLe code du script sera le suivant :

function getDimension(dim) {
    var finaldim = dim.width + "-" + dim.height;
    return finaldim;
}
getDimension({ width: "300px", height: "250px" });

Classe implémentant une interface

Pour utiliser une interface avec une classe, vous devez utiliser le mot-clé met en oeuvre.

Syntaxe d'une classe implémentant une interface :

class NameofClass implements InterfaceName {
}

L'exemple suivant illustre une interface fonctionnant avec une classe.

interface Dimension {
    width : string,
    height: string,
    getWidth(): string;
}

class Shapes implements Dimension {
    width: string;
    height: string;
    constructor (width:string, height:string) {
        this.width = width;
        this.height = height;
    }
    getWidth() {
        return this.width;
    }
}

Dans l'exemple ci-dessus, vous avez défini l'interface Dimension avec les propriétés width et height, toutes deux de type chaîne de caractères, et une méthode appelée getWidth() qui renvoie une chaîne de caractères.

Le compilé JavaLe code du script sera le suivant :

var Shapes = /** @class */ (function () {
    function Shapes(width, height) {
        this.width = width;
        this.height = height;
    }
    Shapes.prototype.getWidth = function () {
        return this.width;
    };
    return Shapes;
}());

Fonctions dans TypeScript

Les fonctions sont des ensembles d'instructions exécutées pour réaliser une tâche. JavaDans le script, la majeure partie du code est écrite sous forme de fonctions et celles-ci jouent un rôle majeur. TypeScript Vous disposez de classes, d'interfaces, de modules et d'espaces de noms, mais les fonctions conservent un rôle important. La différence entre une fonction dans JavaScénario et TypeScript est le paramètre et les types de retour disponibles avec un TypeScript la fonction.

JavaFonction de script :

function add (a1, b1) {
   return a1+b1;
}

TypeScript fonction:

function  add(a1 : number, b1: number) : number {
    return a1 + b1;
}

Dans la fonction ci-dessus, le nom de la fonction est add, les paramètres sont a1 et b1Les deux arguments sont de type numérique, et le type de retour est également un nombre. Si vous passez une chaîne de caractères à la fonction, une erreur de compilation sera levée lors de la compilation. JavaScénario.

Appel de la fonction : ajouter

let x = add(5, 10);   // will return 15
let b = add(5);       // error TS2554: Expected 2 arguments, but got 1
let c = add(3,4,5);   // error TS2554: Expected 2 arguments, but got 3
let t = add("Harry", "John");
// error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'

Les paramètres a1 et b1 Ces paramètres sont obligatoires et leur absence entraînera une erreur. Le type des paramètres et le type de retour sont tout aussi importants et ne peuvent plus être modifiés une fois définis.

Paramètres facultatifs d'une fonction

In JavaDans un script, tous les paramètres des fonctions sont optionnels et sont considérés comme indéfinis s'ils ne sont pas fournis. Ce n'est pas le cas dans… TypeScriptUne fois les paramètres définis, vous devez les fournir. Si vous souhaitez qu'un paramètre soit facultatif, ajoutez un point d'interrogation après son nom, comme indiqué ci-dessous :

function getName(firstname: string, lastname?: string): string {
    return firstname + lastname;
}

let a = getName("John");              // returns Johnundefined
let b = getName("John", "Harry");     // returns JohnHarry
let c = getName("John", "H", "Harry"); // error TS2554: Expected 1-2 arguments, but got 3

Veuillez noter que les paramètres optionnels doivent être définis en dernier. Il est impossible d'avoir un premier paramètre optionnel et un second obligatoire, car le compilateur ne saurait pas quelle valeur a été fournie.

Attribuer des valeurs par défaut aux paramètres

Vous pouvez attribuer des valeurs par défaut aux paramètres comme indiqué ci-dessous :

function getName(firstname: string, lastname = "Harry"): string {
    return firstname + lastname;
}

let a = getName("John");      // will return JohnHarry
let b = getName("John", "H"); // will return JohnH

À l'instar des paramètres optionnels, les paramètres initialisés par défaut doivent également être conservés à la fin de la liste des paramètres.

Paramètres de repos

Vous avez vu comment TypeScript Il gère les paramètres obligatoires, les paramètres optionnels et les paramètres de valeur par défaut. Nous allons maintenant examiner les paramètres REST. Les paramètres REST sont un groupe de paramètres optionnels définis ensemble, à l'aide de trois des points (...) suivi du nom du paramètre, qui est un tableau.

Syntaxe des paramètres Rest :

function testFunc(a: string, ...arr: string[]) :string {
    return a + arr.join("");
}

Comme indiqué ci-dessus, le paramètre rest est un tableau précédé de trois points. Ce tableau contiendra tous les arguments restants passés à la fonction.

Exemple :

let a = testFunc("Monday", "Tuesday", "Wednesday", "Thursday");
// output is MondayTuesdayWednesdayThursday

Fonctions de flèche

Une fonction de flèche est l'une des fonctionnalités importantes publiées dans ES6 et elle est disponible dans TypeScript La syntaxe comporte également une flèche épaisse, d'où son nom.

Syntaxe de la fonction flèche :

var nameoffunction = (params) => {
 // code here
}

À quoi sert une fonction fléchée ?

Prenons un exemple pour comprendre le cas d'utilisation d'une fonction fléchée.

Exemple :

var ScoreCard = function () {
    this.score = 0;

    this.getScore = function () {
        setTimeout(function () {
            console.log(this.score);    // gives undefined
        }, 1000);
    }
}

var a = new ScoreCard();
a.getScore();

Vous avez créé une fonction avec une propriété `score` initialisée à 0, et une méthode `getScore` qui utilise en interne `setTimeout` et, après une seconde, affiche `this.score` dans les journaux. La valeur affichée est `undefined` même si `this.score` est définie et initialisée. Le problème vient de… ceci. Le mot-clé `this` est utilisé par la fonction `setTimeout`, et comme `score` n'y est pas défini, le résultat est indéfini.

On peut obtenir le même résultat à l'aide d'une fonction fléchée, comme indiqué ci-dessous :

var ScoreCard = function () {
    this.score = 0;

    this.getScore = function () {
        setTimeout(() => {
            console.log(this.score);   // you get 0
        }, 1000);
    }
}

var a = new ScoreCard();
a.getScore();

Une fonction flèche n'a pas la sienne ceci.et partage plutôt celle de sa portée parente, de sorte que les variables déclarées en dehors de cette portée sont accessibles avec `this` à l'intérieur d'une fonction fléchée. Elles sont utiles en raison de leur syntaxe plus courte, ainsi que pour les fonctions de rappel, les gestionnaires d'événements et les fonctions de temporisation.

TypeScript Enums

A TypeScript Un enum est un objet qui contient une collection de valeurs liées stockées ensemble. JavaScript ne prend pas en charge nativement les énumérations. La plupart des langages de programmation tels que Java, C et C++ les énumérations de support et TypeScript les rend également disponibles. Les énumérations sont définies à l'aide du mot-clé enum.

Comment déclarer un Enum ?

syntaxe:

enum NameofEnum {
   value1,
   value2,
    ..
}

Exemple : Énumération

enum Directions {
    North,
    South,
    East,
    West
}

Dans l'exemple ci-dessus, vous avez défini une énumération appelée Directions avec les valeurs Nord, Sud, Est et Ouest. Les valeurs sont numérotées à partir de 0 pour la première entrée et augmentent de 1 pour chaque entrée suivante.

Déclarez une énumération avec une valeur numérique

Par défaut, si aucun élément d'une énumération n'est spécifié, il prend un nombre commençant par 0. L'exemple suivant illustre une énumération avec des valeurs numériques explicites.

enum Directions {
North = 0,
South = 1,
East = 2,
West = 3
}

Vous pouvez également attribuer une valeur initiale, et les membres suivants recevront des valeurs incrémentées. Par exemple :

enum Directions {
North = 5,
South, // will be 6
East,  // 7
West   // 8
}

Le Nord commence à 5, donc le Sud est 6, l'Est est 7 et l'Ouest est 8.

Vous pouvez également attribuer des valeurs de votre choix au lieu des valeurs par défaut. Par exemple :

enum Directions {
North = 5,
South = 4,
East = 6,
West = 8
}

Comment accéder à une Enum ?

L'exemple suivant montre comment utiliser une énumération dans votre code :

enum Directions {
    North,
    South,
    East,
    West
}

console.log(Directions.North);      // output is 0
console.log(Directions["North"]); // output is 0
console.log(Directions[0]);       // output is North

Le compilé JavaLe script est le suivant :

var Directions;
(function (Directions) {
    Directions[Directions["North"] = 0] = "North";
    Directions[Directions["South"] = 1] = "South";
    Directions[Directions["East"] = 2] = "East";
    Directions[Directions["West"] = 3] = "West";
})(Directions || (Directions = {}));
console.log(Directions.North);
console.log(Directions["North"]);
console.log(Directions[0]);

Depuis que JavaLe script ne prend pas en charge les énumérations ; le compilateur convertit l’énumération en une fonction auto-appelée, comme indiqué ci-dessus. La double affectation crée la table de correspondance inversée.ping Du numéro au nom.

Déclarez une énumération avec une valeur de chaîne.

Vous pouvez attribuer des valeurs de chaîne de votre choix, comme indiqué dans l'exemple ci-dessous.

Exemple :

enum Directions {
    North = "N",
    South = "S",
    East = "E",
    West = "W"
}

console.log(Directions.North);      // output is N
console.log(Directions["North"]); // output is N
console.log(Directions[0]);       // output is undefined

Le compilé JavaLe script est le suivant :

var Directions;
(function (Directions) {
    Directions["North"] = "N";
    Directions["South"] = "S";
    Directions["East"] = "E";
    Directions["West"] = "W";
})(Directions || (Directions = {}));
console.log(Directions.North);
console.log(Directions["North"]);
console.log(Directions[0]);

⚠️ Attention : Les énumérations de chaînes de caractères n'ont pas de correspondance inverse.pingComparez les deux résultats compilés ci-dessus : l’énumération numérique stocke les deux sens, tandis que l’énumération de chaînes ne stocke que le lien entre le nom et la valeur. C’est pourquoi Directions[0] Renvoie undefined pour une énumération de chaînes.

Quels sont les modules dans TypeScript?

Fichiers créés dans TypeScript L'accès global signifie que les variables déclarées dans un fichier sont accessibles depuis un autre fichier. Cette globalité peut engendrer des conflits de code et des problèmes d'exécution. Les fonctionnalités d'exportation et d'importation de modules permettent d'éviter ces conflits. Cette fonctionnalité est apparue dans [référence manquante]. JavaScript avec la version ES6 et est également pris en charge dans TypeScript.

Pourquoi avez-vous besoin de modules dans TypeScript?

L'exemple suivant illustre le problème sans modules.

Exemple test1.ts

let age : number = 25;

Vous avez défini un âge variable de type numéro dans test1.ts.

Exemple test2.ts

Dans test2.ts, vous pouvez accéder à la variable âge défini dans test1.ts et modifiez-le également, comme indiqué ci-dessous :

age = 30; // changed from 25 to 30.
let _new_age = age;

Cela peut engendrer de nombreux problèmes, car les variables sont accessibles globalement et peuvent être modifiées depuis n'importe où.

Avec modulesLe code écrit reste local au fichier et n'est pas accessible en dehors de celui-ci. Pour partager des éléments d'un fichier, il faut l'exporter à l'aide du mot-clé `export`. Télécharger On utilise cette méthode lorsqu'on souhaite utiliser une variable, une classe, une fonction ou une interface dans un autre fichier. Global Cette méthode est utilisée pour accéder à un élément exporté. Elle permet de conserver l'intégrité du code dans le fichier et d'éviter toute confusion entre les noms de variables utilisés, même en cas de définition de noms identiques.

Utilisation de l'exportation et de l'importation

Il existe de nombreuses méthodes d'exportation et d'importation. Nous aborderons la syntaxe la plus couramment utilisée.

La syntaxe pour l'import et l'export 1 :

export  nameofthevariable or class name or interface name etc

//To import the above variable or class name or interface you have to use import as shown below:

import {nameofthevariable or class name or interfacename} from "file path here without .ts"

Voici un exemple fonctionnel utilisant l'exportation et l'importation.

test1.ts

export let age: number = 25;

Le mot-clé « export » est utilisé pour partager la variable « âge » avec un autre fichier.

test2.ts

import { age } from "./test1"
let new_age :number = age;

Le mot-clé import est utilisé pour accéder à âge variable, et vous devez spécifier l'emplacement du fichier comme indiqué ci-dessus.

Syntaxe pour l'importation et l'exportation 2 :

Il existe une autre méthode d'exportation et d'importation, dont la syntaxe est présentée ci-dessous :

export = classname;

import classname = require("file path of modulename")

Lorsque vous utilisez exporter = Pour exporter votre module, l'importation doit utiliser require("chemin du fichier du nom du module").

Voici un exemple concret illustrant ce cas.

Client.ts

class Customer {
    name: string;
    age: number;

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

    getName(): string {
        return this.name;
    }
}

export = Customer;

testClient.ts

import Customer = require("./Customer");

let a = new Customer("Harry", 30);
alert(a.getName());

Chargeur de modules

Les modules ne peuvent pas fonctionner de manière autonome ; vous avez donc besoin d’un chargeur de modules pour localiser les dépendances d’importation, comme illustré dans le TypeScript Les exemples ci-dessus illustrent ce point. Les chargeurs de modules disponibles sont CommonJS pour Node.js et Require.js pour une exécution dans le navigateur.

Pour compiler du code au format de module CommonJS, utilisez la commande suivante :

tsc --module commonjs testCustomer.ts

Pour compiler du code au format de module Requirejs, utilisez la commande suivante :

tsc --module amd testCustomer.ts

Les fichiers dépendants seront convertis en fichiers js à l'aide de la commande ci-dessus.

Exemple de conversion de testCustomer.ts en testCustomer.js avec RequireJS

define(["require", "exports", "./Customer"], function (require, exports, Customer) {
    "use strict";
    exports.__esModule = true;
    var a = new Customer("Harry", 30);
    alert(a.getName());
});

Exemple de conversion de Customer.ts en Customer.js avec RequireJS

define(["require", "exports"], function (require, exports) {
    "use strict";
    var Customer = /** @class */ (function () {
        function Customer(name, age) {
            this.name = name;
            this.age = age;
        }
        Customer.prototype.getName = function () {
            return this.name;
        };
        return Customer;
    }());
    return Customer;
});

Pour le tester avec require.js, vous devez créer un fichier appelé main.js qui référence les dépendances comme indiqué.

Voici la structure des dossiers :

src/
    Customer.js
    testCustomer.js
    main.js
    require.js  // you can get this file from github or npm install requirejs
    test.html

main.js

define(function (require) {
    var customer = require("./Customer");
    var testCustomer = require("./testCustomer");
});

test.html

<!DOCTYPE html>
<html>
<head>
    <title>TypeScript Module testing using Requirejs</title>
    <script data-main="main" src="require.js"></script>
</head>
<body>
    <h3>Testing modules using Requirejs</h3>
</body>
</html>

Chargeur de modules

Espaces de noms dans TypeScript

Un espace de noms regroupe dans un seul fichier une collection de classes, d'interfaces, de variables et de fonctions.

Syntaxe de l'espace de noms

namespace name{

export class {
}

export interface {
}

export const constname;

}

Le code correspondant est disponible sous un seul espace de noms.

Exemple fonctionnel d'espace de noms : testnamespace.ts

namespace StudentSetup {

    export interface StudDetails {
        name: string;
        age: number;
    }

    export function addSpace(str) { // will add space to the string given
        return str.split("").join(" ");
    }

    export class Student implements StudDetails {
        name: string;
        age: number;

        constructor(studentdetails: StudDetails) {
            this.name = studentdetails.name;
            this.age = studentdetails.age;
        }

        getName(): string {
            return this.name;
        }
    }
}

Le nom de l'espace de noms est Configuration de l'étudiant, et vous avez ajouté une interface StudDetails, une fonction addSpace et une classe appelée Student.

Accéder à un espace de noms

Voici le code où vous utilisez l'espace de noms Configuration de l'étudiant.

testStudentSetup.ts

let a = new StudentSetup.Student({ name: "Harry", age: 20 });

console.log("The name is :" + StudentSetup.addSpace(a.getName()));

La classe, l'interface ou la fonction disponible dans un espace de noms doit être référencée en utilisant le nom de l'espace de noms, par exemple : StudentSetup.addSpace pour accéder à la fonction et StudentSetup.Student pour accéder au cours.

Vous pouvez compiler les deux fichiers en un seul fichier js comme indiqué ci-dessous :

tsc --outFile namespace.js testnamespace.ts  testStudentSetup.ts

Vérifiez le résultat dans l'invite de commandes à l'aide de la commande ci-dessous :

node namespace.js

Sortie :

The name is :H a r r y

Déclarations ambiantes dans TypeScript

TypeScript vous permet d'utiliser des tiers JavaFichiers de script utilisant des déclarations ambiantes. L'avantage de cette fonctionnalité est qu'il n'est pas nécessaire de réécrire la bibliothèque, tout en conservant l'accès à toutes ses fonctionnalités avec vérification de type. TypeScript.

Syntaxe ambiante

Pour déclarer un module ambiant :

declare module moduleName {
   //code here
}

Le fichier d'ambiance doit être enregistré sous le nom :

filename.d.ts

Pour utiliser le fichier nom de fichier.d.ts Dans votre fichier .ts, vous devez y faire référence comme suit :

/// <reference path="filename.d.ts"/>

La déclaration de type ambiant dans TypeScript fait référence à la bibliothèque tierce et redéclare les fonctions requises avec leurs propres types. Par exemple, considérons le petit JavaBibliothèque de scripts présentée ci-dessous.

Parties tierces JavaFichier de script : testString.js

var StringChecks = {
    isString: function (str) {
        return typeof str === "string";
    },

    convertToUpperCase: function (str) {
        return str.toUpperCase();
    },

    convertToLowerCase: function (str) {
        return str.toLowerCase();
    },

    convertToStringBold: function (str) {
        return str.bold();
    }
};

Vous disposez d'un objet appelé StringChecks qui possède les fonctions isString, convertToUpperCase, convertToLowerCase et convertToStringBold.

Création d'un module ambiant dans TypeScript

Nous allons maintenant créer un module d'ambiance qui référence le JavaLes fonctions du script sont indiquées ci-dessus et des vérifications de type sont ajoutées selon les besoins.

Nom du fichier : tstring.d.ts

declare module TestString {

    export interface StringsFunc {
        isString(str: string): boolean;
        convertToUpperCase(str: string): string;
        convertToLowerCase(str: string): string;
        convertToStringBold(str: string): string;
    }
}

declare var StringChecks: TestString.StringsFunc;

Vous définissez un module nommé TestString et exportez l'interface StringsFunc. Chaque signature indique ce que la fonction accepte et renvoie :

  • isString(str: string): booléen Cette fonction prend une chaîne de caractères et renvoie une valeur booléenne. Le passage d'un nombre ou de tout autre type provoque une erreur de compilation.
  • convertToUpperCase(str: chaîne): chaîne – prend une chaîne de caractères et renvoie une chaîne de caractères.
  • convertToLowerCase(str: chaîne): chaîne – prend une chaîne de caractères et renvoie une chaîne de caractères.
  • convertToStringBold(str: chaîne): chaîne – prend une chaîne de caractères et renvoie une chaîne de caractères.

Depuis l' JavaLe fichier de script expose le nom de l'objet StringChecks, nous faisons finalement référence à ce même nom dans le fichier .d.ts :

declare var StringChecks: TestString.StringsFunc;

Utilisation d'un module Ambient dans TypeScript

Voici le fichier test.ts qui utilise le fichier ambiant tstring.d.ts.

/// <reference path="tstring.d.ts"/>
let str1 = StringChecks.isString("Hello World");
console.log(str1);
let str2 = StringChecks.convertToUpperCase("hello world");
console.log(str2);
let str3 = StringChecks.convertToLowerCase("HELLO");
console.log(str3);
let str4 = StringChecks.convertToStringBold("Hello World");
console.log(str4);

Compilez avec tsc test.ts pour produire test.js :

/// <reference path="tstring.d.ts"/>
var str1 = StringChecks.isString("Hello World");
console.log(str1);
var str2 = StringChecks.convertToUpperCase("hello world");
console.log(str2);
var str3 = StringChecks.convertToLowerCase("HELLO");
console.log(str3);
var str4 = StringChecks.convertToStringBold("Hello World");
console.log(str4);

Vous pouvez désormais utiliser test.js dans un fichier HTML conjointement avec le fichier de bibliothèque testString.js.

<html>
<head>
    <title>Test TypeScript Ambient</title>
    <script src="testString.js"></script>
    <script src="test.js"></script>
</head>
<body>
</body>
</html>

Sortie :

true
HELLO WORLD
hello
<b>Hello World</b>

Astuce : Pour les bibliothèques populaires, il est rarement nécessaire d'écrire soi-même un fichier .d.ts. Installez plutôt les types maintenus par la communauté, par exemple. npm install --save-dev @types/lodashet le compilateur les détecte automatiquement.

Pour continuer, comparez directement les deux langues dans TypeScript vs Javascénario, revisit Javaméthodes de tableau de script pour les équivalents non typés utilisés ici, et étude boucles dans Javascénario et interne et externe Javascénario pour les éléments fondamentaux du navigateur sur lesquels repose la sortie compilée.

FAQ

Non. Un navigateur exécute JavaCe script ne contient que des données ; le fichier .ts doit donc être compilé au préalable avec tsc ou un outil de regroupement de modules. Les annotations de type sont effacées lors de cette étape, ce qui n'a aucun impact sur les performances.

Oui. Activez allowJs dans tsconfig.json et renommez les fichiers un par un. Car chaque JavaLe fichier de script est déjà valide TypeScriptLe projet continue de se compiler tout au long de la migration.

Une interface peut être rouverte et étendue ; c’est le choix habituel pour les structures d’objets. Un alias de type couvre également les unions, les tuples et les types primitifs, que les interfaces ne peuvent pas exprimer.

Utilisez des modules avec les fonctions d'exportation et d'importation. Les espaces de noms sont antérieurs aux modules ES et restent utiles principalement pour les fichiers de déclaration et les anciens projets basés sur des scripts.

Oui, de manière mesurable. Le compilateur rejette immédiatement les propriétés erronées et les types d'arguments incorrects ; ainsi, un extrait de code généré passe la vérification de type ou signale précisément les erreurs.

L'intégration à l'éditeur permet d'intégrer les types environnants et les fichiers .d.ts au contexte du modèle. Des annotations plus riches produisent ainsi des complétions plus précises qu'un code faiblement typé.

Résumez cet article avec :