TypeScript - переменные

Переменная по определению - это «именованное пространство в памяти», в котором хранятся значения. Другими словами, он действует как контейнер для значений в программе. Переменные TypeScript должны соответствовать правилам именования JavaScript -

  • Имена переменных могут содержать буквы и цифры.

  • Они не могут содержать пробелы и специальные символы, за исключением подчеркивания (_) и знака доллара ($).

  • Имена переменных не могут начинаться с цифры.

Перед использованием переменная должна быть объявлена. Использоватьvar ключевое слово для объявления переменных.

Объявление переменной в TypeScript

Синтаксис типа для объявления переменной в TypeScript должен включать двоеточие (:) после имени переменной, за которым следует ее тип. Как и в JavaScript, мы используемvar ключевое слово для объявления переменной.

Когда вы объявляете переменную, у вас есть четыре варианта:

  • Объявите его тип и значение в одной инструкции.

  • Объявите его тип, но не значение. В этом случае для переменной будет установлено значение undefined.

  • Объявите его значение, но не тип. Тип переменной будет установлен на тип данных присвоенного значения.

  • Не объявляйте ни значение, ни тип. В этом случае тип данных переменной будет любым и будет инициализирован значением undefined.

В следующей таблице показан допустимый синтаксис для объявления переменной, как обсуждалось выше.

S.No. Синтаксис и описание объявления переменных
1.

var name:string = ”mary”

В переменной хранится значение типа строка

2.

var name:string;

Переменная - это строковая переменная. Значение переменной по умолчанию не определено.

3.

var name = ”mary”

Тип переменной выводится из типа данных значения. Здесь переменная имеет тип string

4.

var name;

Тип данных переменной - любой. По умолчанию его значение не определено.

Пример: переменные в 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)

При компиляции он сгенерирует следующий код 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);

Результат вышеупомянутой программы приведен ниже -

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

Компилятор TypeScript сгенерирует ошибки, если мы попытаемся присвоить значение переменной другого типа. Следовательно, TypeScript следует строгой типизации. Синтаксис строгой типизации гарантирует, что типы, указанные по обе стороны от оператора присваивания (=), одинаковы. Вот почему следующий код приведет к ошибке компиляции -

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

Утверждение типа в TypeScript

TypeScript позволяет изменять переменную с одного типа на другой. TypeScript называет этот процесс утверждением типа . Синтаксис заключается в том, чтобы поместить целевой тип между символами <> и поместить его перед переменной или выражением. Следующий пример объясняет эту концепцию -

пример

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

Если вы наведете указатель мыши на оператор утверждения типа в Visual Studio Code, он отобразит изменение типа данных переменной. В основном это позволяет утверждению от типа S к T успешно, если либо S является подтипом T, либо T является подтипом S.

Причина, по которой это не называется «приведением типов», заключается в том, что приведение типов обычно подразумевает некоторую поддержку времени выполнения, в то время как «утверждения типов» являются исключительно конструкцией времени компиляции и способом предоставления вам подсказок компилятору о том, как вы хотите, чтобы ваш код был быть проанализированы.

При компиляции он сгенерирует следующий код JavaScript.

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

Он выдаст следующий результат -

string

Предполагаемый ввод в TypeScript

Учитывая тот факт, что Typescript строго типизирован, эта функция не является обязательной. TypeScript также поддерживает динамическую типизацию переменных. Это означает, что TypeScript поощряет объявление переменной без типа. В таких случаях компилятор определит тип переменной на основе присвоенного ей значения. TypeScript найдет первое использование переменной в коде, определит тип, для которого он был изначально установлен, а затем примет тот же тип для этой переменной в остальной части вашего блока кода.

То же самое объясняется в следующем фрагменте кода -

Пример: предполагаемый ввод

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

В приведенном выше фрагменте кода -

  • Код объявляет переменную и устанавливает для нее значение 2. Обратите внимание, что в объявлении переменной не указывается тип данных. Следовательно, программа использует предполагаемую типизацию для определения типа данных переменной, т. Е. Она назначает тип первого значения, которое устанавливается переменной. В этом случае,num установлен на номер типа.

  • Когда код пытается установить значение переменной как string. Компилятор выдает ошибку, поскольку тип переменной уже установлен на число.

Он выдаст следующий результат -

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

Область видимости переменной TypeScript

Область действия переменной указывает, где определена переменная. Доступность переменной в программе определяется ее объемом. Переменные TypeScript могут иметь следующие области:

  • Global Scope- Глобальные переменные объявляются вне программных конструкций. К этим переменным можно получить доступ из любого места в вашем коде.

  • Class Scope - Эти переменные также называются fields. Поля или переменные класса объявляются внутри класса, но вне методов. Доступ к этим переменным можно получить с помощью объекта класса. Поля также могут быть статичными. Доступ к статическим полям можно получить, используя имя класса.

  • Local Scope - Локальные переменные, как следует из названия, объявляются внутри таких конструкций, как методы, циклы и т. Д. Локальные переменные доступны только внутри конструкции, в которой они объявлены.

В следующем примере показаны области действия переменных в TypeScript.

Пример: область действия переменной

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)

При транспиляции создается следующий код 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);

Он выдаст следующий результат -

Global num: 12
10
Global num: 13

Если вы попытаетесь получить доступ к локальной переменной вне метода, это приведет к ошибке компиляции.

error TS2095: Could not find symbol 'local_num'.