TypeScript 基础语法

  1. TypeScript 程序由以下几个部分组成:
  • 模块
  • 函数
  • 变量
  • 语句和表达式
  • 注释

TypeScript 基础类型

数据类型

关键字

描述

任意类型

any

声明为 any 的变量可以赋予任意类型的值。

数字类型

number

双精度 64 位浮点值。它可以用来表示整数和分数。

let binaryLiteral: number = 0b1010; // 二进制

let octalLiteral: number = 0o744; // 八进制

let decLiteral: number = 6; // 十进制

let hexLiteral: number = 0xf00d; // 十六进制

字符串类型

string

一个字符系列,使用单引号(’)或双引号(")来表示字符串类型。反引号()来定义多行文本和内嵌表达式。<br>let name: string = "Runoob";<br>let years: number = 5;<br>let words: string =您好,今年是 ${ name } 发布 ${ years + 1} 周年`;

布尔类型

boolean

表示逻辑值:true 和 false。

let flag: boolean = true;

数组类型 无

声明变量为数组。

// 在元素类型后面加上[]

let arr:

number[] = [1, 2];

// 或者使用数组泛型

let arr: Array = [1, 2];

元组


元组类型用来表示已知元素数量和类型的数组,各元素的类型不必相同,对应位置的类型需要相同。

let x: [string, number];

x = [‘Runoob’, 1]; // 运行正常

x = [1, ‘Runoob’]; // 报错

console.log(x[0]); // 输出 Runoob

枚举

enum

枚举类型用于定义数值集合。

enum Color {Red, Green, Blue};

let c: Color = Color.Blue;

console.log©; // 输出 2

void void

用于标识方法返回值的类型,表示该方法没有返回值。

function hello(): void {

alert(“Hello Runoob”);

}

null

null

表示对象值缺失。

undefined

undefined

用于初始化变量为一个未定义的值

never

never

never 是其它类型(包括 null 和ndefined)的子类型,代表从不会出现的值。

TypeScript 变量声明

变量是一种使用方便的占位符,用于引用计算机内存地址。我们可以把变量看做存储数据的容器。

TypeScript 变量的命名规则:

  • 变量名称可以包含数字和字母。
  • 除了下划线 _ 和美元 $ 符号外,不能包含其他特殊字符,包括空格。
  • 变量名不能以数字开头。
  • 变量使用前必须先声明,我们可以使用 var 来声明变量。

我们可以使用以下四种方式来声明变量:

  • 声明变量的类型及初始值:
var [变量名] : [类型] = 值;

例如:

var uname:string = "万类霜天竞自由";
  • 声明变量的类型及但没有初始值,变量值会设置为 undefined:
var [变量名] : [类型];

例如:

var uname:string;
  • 声明变量并初始值,但不设置类型类型,该变量可以是任意类型:
var [变量名] = 值;

例如:

var uname = "Runoob";
  • 声明变量没有设置类型和初始值,类型可以是任意类型,默认初始值为 undefined:
var [变量名];

例如:

var uname;

类型断言(Type Assertion)

类型断言可以用来手动指定一个值的类型,即允许变量从一种类型更改为另一种类型。及强语言中的类型强转

语法格式:

<类型>值
或:
值 as 类型

实例

var str = '1' 
var str2:number = <number> <any> str   //str、str2 是 string 类型
console.log(str2)

TypeScript 是怎么确定单个断言是否足够
当 S 类型是 T 类型的子集,或者 T 类型是 S 类型的子集时,S 能被成功断言成 S。这是为了在进行类型断言时提供额外的安全性,完全毫无根据的断言时危险的,如果你想这么做,你可以使用 any。

它之所以不被称为类型转换,是因为转换通常意味着某种运行时的支持。但是,类型断言纯粹是一个编译时语法,同时,它也是一种为编译器提供关于如何分析代码的方法。

编译后,以上代码会生成如下 JavaScript 代码:

var str = '1';
var str2 = str;  //str、str2 是 string 类型
console.log(str2);
执行输出结果为:
1

类型推断

  • 当类型没有给出时,TypeScript 编译器利用类型推断来推断类型。
  • 如果由于缺乏声明而不能推断出类型,那么它的类型被视作默认的动态 any 类型。
var num = 2;    // 类型推断为 number
console.log("num 变量的值为 "+num); 
num = "12";    // 编译错误
console.log(num);

第一行代码声明了变量 num 并=设置初始值为 2。 注意变量声明没有指定类型。因此,程序使用类型推断来确定变量的数据类型,第一次赋值为 2,num 设置为 number 类型。

第三行代码,当我们再次为变量设置字符串类型的值时,这时编译会错误。因为变量已经设置为了 number 类型。

error TS2322: Type '"12"' is not assignable to type 'number'.

变量作用域

  1. 变量作用域指定了变量定义的位置。
  2. 程序中变量的可用性由变量作用域决定。

TypeScript 有以下几种作用域:

  • 全局作用域 − 全局变量定义在程序结构的外部,它可以在你代码的任何位置使用。
  • 类作用域 − 这个变量也可以称为 字段。类变量声明在一个类里头,但在类的方法外面。该变量可以通过类的对象来访问。类变量也可以是静态的,静态的变量可以通过类名直接访问。
  • 局部作用域 − 局部变量,局部变量只能在声明它的一个代码块(如:方法)中使用。
var global_num = 12          // 全局变量
class Numbers { 
   num_val = 13;             // 类变量
   static sval = 10;         // 静态变量
   
   storeNum():void { 
      var local_num = 14;    // 局部变量
   } 
} 
console.log("全局变量为: "+global_num)  
console.log(Numbers.sval)   // 静态变量
var obj = new Numbers(); 
console.log("类变量: "+obj.num_val)

运算符

运算符

描述

例子

x 运算结果

y 运算结果

+

加法

x=y+2

7

5

-

减法

x=y-2

3

5

*

乘法

x=y*2

10

5

/

除法

x=y/2

2.5

5

%

取模(余数)

x=y%2

1

5

++

自增

x=++y

6

6


自减

x=–y

4

4

关系运算符

  • 关系运算符用于计算结果是否为 true 或者 false。x=5,下面的表格解释了关系运算符的操作:

运算符

描述

比较

返回值

==

等于

x==8

false

==

等于

x==5

true

!=

不等于

x!=8

true

>

大于

x>8

false

<

小于

x<8

true

>=

大于或等于

x>=8

false

<=

小于或等于

x<=8

true

逻辑运算符

逻辑运算符用于测定变量或值之间的逻辑。给定 x=6 以及 y=3,下表解释了逻辑运算符:

运算符

描述

例子

&&

and

(x < 10 && y > 1) 为 true

||

or

(x==5

!

not

!(x==y) 为 true

位运算符

位操作是程序设计中对位模式按位或二进制数的一元和二元操作。

运算符

描述

例子

类似于

结果

十进制

&

AND,按位与处理两个长度相同的二进制数,两个相应的二进位都为 1,该位的结果值才为 1,否则为 0。

x = 5&1

0101 & 0001

0001

0001

|

OR,按位或处理两个长度相同的二进制数,两个相应的二进位中只要有一个为 1,该位的结果值为 1。

x = 5

1 0101

0001 0101

5

~

取反,取反是一元运算符,对一个二进制数的每一位执行逻辑反操作。使数字 1 成为 0,0 成为 1。

x = ~ 5 ~0101

1010

-6

^

异或,按位异或运算,对等长二进制模式按位或二进制数的每一位执行逻辑异按位或操作。操作的结果是如果某位不同则该位为 1,否则该位为 0。

x = 5 ^ 1

0101 ^ 0001

0100

4

<<

左移,把 << 左边的运算数的各二进位全部左移若干位,由 << 右边的数指定移动的位数,高位丢弃,低位补 0。

x = 5 << 1

0101 << 1

1010

10

>>

右移,把 >> 左边的运算数的各二进位全部右移若干位,>> 右边的数指定移动的位数。

x = 5 >> 1

0101 >> 1

0010

2

>>>

无符号右移,与有符号右移位类似,除了左边一律使用0 补位。

x = 2 >>> 1

0010 >>> 1

0001

1

三元运算符 (?)

三元运算有 3 个操作数,并且需要判断布尔表达式的值。该运算符的主要是决定哪个值应该赋值给变量。

Test ? expr1 : expr2

typeof 运算符

typeof 是一元运算符,返回操作数的数据类型。

查看以下实例:

var num = 12 
console.log(typeof num);   //输出结果: number

其他运算符

负号运算符(-) ,更改操作数的符号,查看以下实例:

var x:number = 4 
var y = -x; 
console.log("x 值为: ",x);   // 输出结果 4 
console.log("y 值为: ",y);   // 输出结果 -4