TypeScript - 变量

根据定义,变量是"存储器中的命名空间",用于存储值.换句话说,它充当程序中值的容器. TypeScript变量必须遵循JavaScript命名规则 :

  • 变量名称可以包含字母和数字.

  • 除了下划线(_)和美元(&美元;)符号外,它们不能包含空格和特殊字符.

  • 变量名不能以数字开头.

变量必须在使用前声明.使用 var 关键字来声明变量.

TypeScript中的变量声明

在TypeScript中声明变量的类型语法是在变量名后包含冒号(:),后跟其类型.就像在JavaScript中一样,我们使用 var 关键字来声明变量.

当您声明变量时,您有四个选项 :

  • 在一个陈述中声明其类型和值.

声明类型

  • 声明其类型但没有价值.在这种情况下,变量将设置为undefined.

未定义

  • 声明其值但没有类型.变量类型将设置为指定值的数据类型.

任何

  • 声明两个值都不是类型.在这种情况下,变量的数据类型将为any,并将初始化为undefined.

任意和未定义

下表说明了变量声明的有效语法,如上所述 :

S.No.变量声明语法&说明
1.

var name:string ="mary"

变量存储类型为string的值

2.

var name:string;

变量是一个字符串变量.默认情况下,变量的值设置为undefined

3.

var name ="mary"

变量的类型是从值的数据类型推断出来的.这里,变量的类型为字符串

4.

var name;

变量的数据类型是any.它的值默认设置为undefined.

示例: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"//将导致编译错误

在TypeScript中键入断言

TypeScript允许将变量从一种类型更改为另一种类型. TypeScript将此过程称为 Type Assertion .语法是将目标类型放在< &GT;符号并将其放在变量或表达式的前面.以下示例解释了此概念 :

示例

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

如果将鼠标指针悬停在Visual中的类型断言语句上Studio Code,它显示变量数据类型的变化.基本上它允许从S到T的断言成功,如果S是T的子类型或T是S的子类型.

它不被称为"类型转换"的原因是转换通常意味着某种运行时支持,而"类型断言"纯粹是一个编译时构造,也是一种为编译器提供关于如何分析代码的提示的方法.

在编译时,它将生成以下JavaScript代码.

//Generated by typescript 1.8.10
var str = '1';
var str2 = str;     //str is now of type number
console.log(str2);

它将产生以下输出 :

 
 1

在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 设置为类型编号.

  • 当代码尝试将变量的值设置为字符串时.编译器抛出错误,因为变量的类型已经设置为数字.

它将产生以下输出 :

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

TypeScript变量范围

变量的范围指定变量的定义位置.程序中变量的可用性由其范围决定. TypeScript变量可以是以下范围 :

  • 全局范围 : 全局变量在编程结构之外声明.这些变量可以在代码中的任何位置访问.

  • 类范围 : 这些变量也称为字段.字段或类变量在类中声明,但在方法之外.可以使用类的对象访问这些变量.字段也可以是静态的.可以使用类名访问静态字段.

  • 本地范围 : 顾名思义,局部变量在方法,循环等结构中声明.局部变量只能在声明它们的构造中访问.

以下示例说明了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'.