TypeScript - Variables

Zmienna z definicji to „nazwana przestrzeń w pamięci”, w której przechowywane są wartości. Innymi słowy, działa jako kontener dla wartości w programie. Zmienne TypeScript muszą być zgodne z regułami nazewnictwa JavaScript -

  • Nazwy zmiennych mogą zawierać litery i cyfry.

  • Nie mogą zawierać spacji ani znaków specjalnych, z wyjątkiem podkreślenia (_) i znaku dolara ($).

  • Nazwy zmiennych nie mogą zaczynać się od cyfry.

Zmienna musi zostać zadeklarowana przed jej użyciem. Użyjvar słowo kluczowe do deklarowania zmiennych.

Deklaracja zmiennej w języku TypeScript

Składnia typu służąca do deklarowania zmiennej w języku TypeScript polega na dodaniu dwukropka (:) po nazwie zmiennej, po którym następuje jej typ. Podobnie jak w JavaScript, używamyvar słowo kluczowe, aby zadeklarować zmienną.

Kiedy deklarujesz zmienną, masz cztery opcje -

  • Zadeklaruj jego typ i wartość w jednej instrukcji.

  • Zadeklaruj jego typ, ale bez wartości. W tym przypadku zmienna zostanie ustawiona na niezdefiniowaną.

  • Zadeklaruj jego wartość, ale bez typu. Typ zmiennej zostanie ustawiony na typ danych o przypisanej wartości.

  • Zadeklaruj żadną wartość ani typ. W tym przypadku typ danych zmiennej będzie dowolny i zostanie zainicjowany jako niezdefiniowany.

Poniższa tabela ilustruje prawidłową składnię deklaracji zmiennej, jak omówiono powyżej -

S.No. Składnia i opis deklaracji zmiennej
1.

var name:string = ”mary”

Zmienna przechowuje wartość typu string

2.

var name:string;

Zmienna jest zmienną łańcuchową. Wartość zmiennej jest domyślnie ustawiona na undefined

3.

var name = ”mary”

Typ zmiennej jest wywnioskowany z typu danych wartości. Tutaj zmienna jest typu string

4.

var name;

Typ danych zmiennej to dowolny. Domyślnie jego wartość jest niezdefiniowana.

Przykład: zmienne w języku 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)

Podczas kompilacji wygeneruje następujący kod JavaScript.

//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);

Wynik powyższego programu podano poniżej -

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

Kompilator TypeScript wygeneruje błędy, jeśli spróbujemy przypisać wartość zmiennej, która nie jest tego samego typu. W związku z tym TypeScript jest zgodny z silnym typowaniem. Składnia silnego typowania gwarantuje, że typy określone po obu stronach operatora przypisania (=) są takie same. Dlatego poniższy kod spowoduje błąd kompilacji -

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

Asercja typu w TypeScript

TypeScript umożliwia zmianę zmiennej z jednego typu na inny. TypeScript odnosi się do tego procesu jako Asercja typu . Składnia polega na umieszczeniu typu docelowego między symbolami <> i umieszczeniu go przed zmienną lub wyrażeniem. Poniższy przykład wyjaśnia tę koncepcję -

Przykład

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

Jeśli umieścisz wskaźnik myszy na instrukcji asercji typu w programie Visual Studio Code, zostanie wyświetlona zmiana typu danych zmiennej. Zasadniczo umożliwia to stwierdzenie od typu S do T, jeśli S jest podtypem T lub T jest podtypem S.

Powodem, dla którego nie jest to nazywane „rzutowaniem typów”, jest to, że rzutowanie generalnie implikuje pewien rodzaj obsługi środowiska uruchomieniowego, podczas gdy „asercje typów” są wyłącznie konstrukcją czasu kompilacji i sposobem na dostarczenie kompilatorowi wskazówek dotyczących sposobu, w jaki kod ma być analizowane.

Podczas kompilacji wygeneruje następujący kod JavaScript.

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

Wytworzy następujący wynik -

string

Wnioskowane wpisywanie w języku TypeScript

Biorąc pod uwagę fakt, że Typescript jest silnie wpisywany, ta funkcja jest opcjonalna. TypeScript zachęca również do dynamicznego wpisywania zmiennych. Oznacza to, że TypeScript zachęca do deklarowania zmiennej bez typu. W takich przypadkach kompilator określi typ zmiennej na podstawie przypisanej jej wartości. TypeScript znajdzie pierwsze użycie zmiennej w kodzie, określi typ, na jaki została początkowo ustawiona, a następnie przyjmie ten sam typ dla tej zmiennej w pozostałej części bloku kodu.

To samo jest wyjaśnione w następującym fragmencie kodu -

Przykład: wywnioskowane pisanie

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

W powyższym fragmencie kodu -

  • Kod deklaruje zmienną i ustawia jej wartość na 2. Należy zauważyć, że deklaracja zmiennej nie określa typu danych. W związku z tym program wykorzystuje typowanie wywnioskowane do określenia typu danych zmiennej, tj. Przypisuje typ pierwszej wartości, na którą ustawiana jest zmienna. W tym przypadku,num jest ustawiony na numer typu.

  • Gdy kod próbuje ustawić wartość zmiennej na łańcuch. Kompilator zgłasza błąd, ponieważ typ zmiennej jest już ustawiony na liczbę.

Wytworzy następujący wynik -

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

Zakres zmiennej TypeScript

Zakres zmiennej określa, gdzie zmienna jest zdefiniowana. Dostępność zmiennej w programie zależy od jej zakresu. Zmienne TypeScript mogą mieć następujące zakresy -

  • Global Scope- Zmienne globalne są deklarowane poza konstrukcjami programistycznymi. Dostęp do tych zmiennych można uzyskać z dowolnego miejsca w kodzie.

  • Class Scope - Te zmienne są również nazywane fields. Pola lub zmienne klas są deklarowane w klasie, ale poza metodami. Dostęp do tych zmiennych można uzyskać za pomocą obiektu klasy. Pola mogą być również statyczne. Dostęp do pól statycznych można uzyskać za pomocą nazwy klasy.

  • Local Scope - Zmienne lokalne, jak sama nazwa wskazuje, są deklarowane w konstrukcjach takich jak metody, pętle itp. Zmienne lokalne są dostępne tylko w konstrukcji, w której zostały zadeklarowane.

Poniższy przykład ilustruje zakresy zmiennych w TypeScript.

Przykład: zakres zmienny

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)

Podczas transpiling generowany jest następujący kod JavaScript -

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);

Wytworzy następujący wynik -

Global num: 12
10
Global num: 13

Jeśli spróbujesz uzyskać dostęp do zmiennej lokalnej poza metodą, spowoduje to błąd kompilacji.

error TS2095: Could not find symbol 'local_num'.