TypeScript - Variables

Une variable, par définition, est «un espace nommé dans la mémoire» qui stocke des valeurs. En d'autres termes, il agit comme un conteneur pour les valeurs d'un programme. Les variables TypeScript doivent suivre les règles de dénomination JavaScript -

  • Les noms de variable peuvent contenir des alphabets et des chiffres numériques.

  • Ils ne peuvent pas contenir d'espaces et de caractères spéciaux, à l'exception du trait de soulignement (_) et du signe dollar ($).

  • Les noms de variables ne peuvent pas commencer par un chiffre.

Une variable doit être déclarée avant d'être utilisée. Utilisez levar mot-clé pour déclarer des variables.

Déclaration de variable dans TypeScript

La syntaxe de type pour déclarer une variable dans TypeScript consiste à inclure un deux-points (:) après le nom de la variable, suivi de son type. Tout comme en JavaScript, nous utilisons levar mot-clé pour déclarer une variable.

Lorsque vous déclarez une variable, vous avez quatre options -

  • Déclarez son type et sa valeur dans une seule instruction.

  • Déclarez son type mais aucune valeur. Dans ce cas, la variable sera définie sur indéfinie.

  • Déclarez sa valeur mais pas de type. Le type de variable sera défini sur le type de données de la valeur affectée.

  • Ne déclarez ni la valeur ni le type. Dans ce cas, le type de données de la variable sera any et sera initialisé à undefined.

Le tableau suivant illustre la syntaxe valide pour la déclaration de variable comme indiqué ci-dessus -

S.No. Syntaxe et description de la déclaration de variable
1.

var name:string = ”mary”

La variable stocke une valeur de type chaîne

2.

var name:string;

La variable est une variable chaîne. La valeur de la variable est définie sur indéfinie par défaut

3.

var name = ”mary”

Le type de la variable est déduit du type de données de la valeur. Ici, la variable est du type string

4.

var name;

Le type de données de la variable est any. Sa valeur est définie sur indéfinie par défaut.

Exemple: variables dans TypeScript

var name:string = "John"; 
var score1:number = 50;
var score2:number = 42.50
var sum = score1 + score2 
console.log("name"+name) 
console.log("first score: "+score1) 
console.log("second score: "+score2) 
console.log("sum of the scores: "+sum)

Lors de la compilation, il générera le code JavaScript suivant.

//Generated by typescript 1.8.10
var name = "John";
var score1 = 50;
var score2 = 42.50;
var sum = score1 + score2;
console.log("name" + name);
console.log("first score: " + score1);
console.log("second score : " + score2);
console.log("sum of the scores: " + sum);

La sortie du programme ci-dessus est donnée ci-dessous -

name:John 
first score:50 
second score:42.50 
sum of the scores:92.50

Le compilateur TypeScript générera des erreurs, si nous tentons d'attribuer une valeur à une variable qui n'est pas du même type. Par conséquent, TypeScript suit le typage fort. La syntaxe de typage fort garantit que les types spécifiés de chaque côté de l'opérateur d'affectation (=) sont identiques. C'est pourquoi le code suivant entraînera une erreur de compilation -

var num:number = "hello"     // will result in a compilation error

Assertion de type dans TypeScript

TypeScript permet de changer une variable d'un type à un autre. TypeScript fait référence à ce processus sous le nom d'assertion de type . La syntaxe consiste à placer le type cible entre les symboles <> et à le placer devant la variable ou l'expression. L'exemple suivant explique ce concept -

Exemple

var str = '1' 
var str2:number = <number> <any> str   //str is now of type number 
console.log(typeof(str2))

Si vous placez le pointeur de la souris sur l'instruction d'assertion de type dans Visual Studio Code, il affiche la modification du type de données de la variable. Fondamentalement, cela permet à l'assertion du type S à T de réussir si S est un sous-type de T ou T est un sous-type de S.

La raison pour laquelle on ne l'appelle pas "casting de type" est que le cast implique généralement une sorte de support d'exécution alors que les "assertions de type" sont purement une construction à la compilation et un moyen pour vous de fournir des conseils au compilateur sur la façon dont vous voulez que votre code être analysé.

Lors de la compilation, il générera le code JavaScript suivant.

"use strict";
var str = '1';
var str2 = str; //str is now of type number 
console.log(typeof (str2));

Il produira la sortie suivante -

string

Saisie déduite dans TypeScript

Étant donné que, Typescript est fortement typé, cette fonctionnalité est facultative. TypeScript encourage également le typage dynamique des variables. Cela signifie que TypeScript encourage la déclaration d'une variable sans type. Dans de tels cas, le compilateur déterminera le type de la variable sur la base de la valeur qui lui est assignée. TypeScript trouvera la première utilisation de la variable dans le code, déterminera le type auquel elle a été initialement définie, puis assumera le même type pour cette variable dans le reste de votre bloc de code.

La même chose est expliquée dans l'extrait de code suivant -

Exemple: saisie déduite

var num = 2;    // data type inferred as  number 
console.log("value of num "+num); 
num = "12";
console.log(num);

Dans l'extrait de code ci-dessus -

  • Le code déclare une variable et définit sa valeur sur 2. Notez que la déclaration de variable ne spécifie pas le type de données. Par conséquent, le programme utilise le typage inféré pour déterminer le type de données de la variable, c'est-à-dire qu'il attribue le type de la première valeur à laquelle la variable est définie. Dans ce cas,num est défini sur le numéro de type.

  • Lorsque le code tente de définir la valeur de la variable sur string. Le compilateur renvoie une erreur car le type de la variable est déjà défini sur nombre.

Il produira la sortie suivante -

error TS2011: Cannot convert 'string' to 'number'.

Portée de la variable TypeScript

La portée d'une variable spécifie où la variable est définie. La disponibilité d'une variable dans un programme est déterminée par sa portée. Les variables TypeScript peuvent avoir les portées suivantes -

  • Global Scope- Les variables globales sont déclarées en dehors des constructions de programmation. Ces variables sont accessibles de n'importe où dans votre code.

  • Class Scope - Ces variables sont également appelées fields. Les champs ou les variables de classe sont déclarés dans la classe mais en dehors des méthodes. Ces variables sont accessibles à l'aide de l'objet de la classe. Les champs peuvent également être statiques. Les champs statiques sont accessibles en utilisant le nom de la classe.

  • Local Scope - Les variables locales, comme son nom l'indique, sont déclarées dans les constructions comme les méthodes, les boucles, etc. Les variables locales ne sont accessibles que dans la construction où elles sont déclarées.

L'exemple suivant illustre les portées de variables dans TypeScript.

Exemple: portée variable

var global_num = 12          //global variable 
class Numbers { 
   num_val = 13;             //class variable 
   static sval = 10;         //static field 
   
   storeNum():void { 
      var local_num = 14;    //local variable 
   } 
} 
console.log("Global num: "+global_num)  
console.log(Numbers.sval)   //static variable  
var obj = new Numbers(); 
console.log("Global num: "+obj.num_val)

Lors du transpiling, le code JavaScript suivant est généré -

var global_num = 12;              //global variable 
var Numbers = (function () {
   function Numbers() {
      this.num_val = 13;          //class variable 
   }
   Numbers.prototype.storeNum = function () {
      var local_num = 14;        //local variable 
   };
   Numbers.sval = 10;            //static field 
   return Numbers;
}());

console.log("Global num: " + global_num);
console.log(Numbers.sval);       //static variable  

var obj = new Numbers();
console.log("Global num: " + obj.num_val);

Il produira la sortie suivante -

Global num: 12
10
Global num: 13

Si vous essayez d'accéder à la variable locale en dehors de la méthode, cela entraîne une erreur de compilation.

error TS2095: Could not find symbol 'local_num'.