TypeScript - 变量
原创TypeScript - 变量
变量,顾名思义,是内存中用于存储值的命名空间。换句话说,它在程序中充当值的容器。TypeScript变量必须遵循JavaScript命名规则:
- 变量名可以包含字母和数字。
- 它们不能包含空格和特殊字符,下划线(_)和美元符号($)除外。
- 变量名不能以数字开头。
变量在使用前必须声明。使用var关键字来声明变量。
TypeScript中的变量声明
在TypeScript中声明变量的类型语法是在变量名后包含冒号(:),然后跟着其类型。就像在JavaScript中一样,我们使用var关键字来声明变量。
声明变量时,有四种选择:
- 在一个语句中声明其类型和值。
- 声明其类型但不赋值。在这种情况下,变量将被设置为undefined。
- 声明其值但不指定类型。变量类型将被设置为所赋值的值的类型。
- 既不声明值也不声明类型。在这种情况下,变量的数据类型将是any,并被初始化为undefined。
下表说明了上述讨论的变量声明的有效语法:
| 序号 | 变量声明语法和描述 |
|---|---|
| 1. |
var name:string = "mary" 变量存储string类型的值 |
| 2. |
var name:string; 变量是一个字符串变量。变量的值默认设置为undefined |
| 3. |
var name = mary 变量的类型从值的类型推断得出。这里,变量是string类型 |
| 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将此过程称为类型断言。语法是将目标类型放在< >符号之间,并将其放在变量或表达式前面。以下示例解释了这个概念:
示例
var str = '1' var str2:number =str //str现在是number类型 console.log(typeof(str2))
如果您将鼠标指针悬停在Visual Studio Code中的类型断言语句上,它会显示变量数据类型的变化。基本上,它允许从类型S到T的断言成功,如果S是T的子类型,或者T是S的子类型。
为什么不称之为"类型转换"的原因是,转换通常意味着某种运行时支持,而类型断言纯粹是编译时构造,是您向编译器提供如何希望分析代码的提示的一种方式。
编译后,它将生成以下JavaScript代码。
"use strict"; var str = '1'; var str2 = str; //str现在是number类型 console.log(typeof (str2));
它将产生以下输出:
string
TypeScript中的类型推断
鉴于TypeScript是强类型的,此功能是可选的。TypeScript也鼓励变量的动态类型。这意味着,TypeScript鼓励不声明类型的变量。在这种情况下,编译器将根据赋给它的值确定变量的类型。TypeScript将在代码中找到变量的第一次使用,确定它最初被设置的类型,然后在代码块的其余部分假设该变量具有相同的类型。
以下代码片段解释了相同的概念:
示例:类型推断
var num = 2; // 数据类型推断为number
console.log("value of num "+num);
num = "12";
console.log(num);
在上述代码片段中:
- 代码声明了一个变量并将其值设置为2。注意,变量声明没有指定数据类型。因此,程序使用类型推断来确定变量的数据类型,即它分配给变量的第一个值的类型。在这种情况下,num被设置为number类型。
- 当代码尝试将变量的值设置为字符串时。编译器会抛出错误,因为变量的类型已经设置为number。
它将产生以下输出:
error TS2011: Cannot convert 'string' to 'number'.
TypeScript变量作用域
变量的作用域指定了变量的定义位置。变量在程序中的可用性由其作用域决定。TypeScript变量可以具有以下作用域:
- 全局作用域 - 全局变量在编程结构之外声明。这些变量可以在代码的任何地方访问。
- 类作用域 - 这些变量也称为字段。字段或类变量在类内部但在方法外部声明。这些变量可以使用类的对象访问。字段也可以是静态的。静态字段可以使用类名访问。
- 局部作用域 - 局部变量,顾名思义,是在方法、循环等结构内声明的。局部变量只能在声明它们的结构中访问。
以下示例说明了TypeScript中的变量作用域。
示例:变量作用域
var global_num = 12 //全局变量
class Numbers {
num_val = 13; //类变量
static sval = 10; //静态字段
storeNum():void {
var local_num = 14; //局部变量
}
}
console.log("Global num: "+global_num)
console.log(Numbers.sval) //静态变量
var obj = new Numbers();
console.log("Global num: "+obj.num_val)
转换后,将生成以下JavaScript代码:
var global_num = 12; //全局变量
var Numbers = (function () {
function Numbers() {
this.num_val = 13; //类变量
}
Numbers.prototype.storeNum = function () {
var local_num = 14; //局部变量
};
Numbers.sval = 10; //静态字段
return Numbers;
}());
console.log("Global num: " + global_num);
console.log(Numbers.sval); //静态变量
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'.
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权本站发表,未经许可,不得转载。
开发学习网




