TypeScript的类型

类型

TypeScript通过向JavaScript增加可选的静态类型声明来把JavaScript变成强类型的程序语言。
当一个变量的类型无法被推测时,一个特殊的类型 any会作为他的类型

类型描述
booleanvar isDone: boolean = false;
number所有的数字在TypeScript中都是浮点数。 var height: number = 6;
stringvar name:string = "bob"; name = 'smith';
arrayvar list:number[] = [1,2,3]; var list:Array<number> = [1,2,3];
enumenum Color {Red, Green, Blue}; var c: Color = Color.Green;
anyany类型可以表示任意JavaScript值。
void在某种程度上,any的对立面就是void。在所有的类型都不存在的时候,你会在一个函数没有返回值的时候看到他

JavaScript的原始类型也包括了undefined和null,undefined是全局作用域的一个属性,他会赋值给那些被声明但是没有被初始化的变量,null是一个字面量,他可以被赋值给那些表示没有值的变量。
然而在TypeScript中,我们不能把null或undefined当作类型使用:

var TestVar: null; //错误,类型错误
var TestVar: undefined; //错误,找不懂undefined

关键字

在TypeScript中,当声明一个变量时们可以使用 var ,let和const关键字。

var mynum:number = 1;
let isValid: bollean = true;
const apiKey : string = "key";

使用var声明的变量保存在最近的函数作用域中(如果不在任何函数中则在全局作用域中)。
使用let声明的变量保存在比函数作用域小的块作用域中(如果不在任何函数中则在全局作用域中)。
const关键字会创建一个保存在创建位置作用域中的常量,可以是全局作用域也可以是块作用域。这表明const是块作用的。

联合类型

TypeScript允许声明联合类型,联合类型用来声明那些可以储存多种类型值的变量。
var path : string[] |string;

类型守护

可以在运行时使用typeof或者instanceof运算符对类型进行验证。 TypeScript语言服务会在if区域寻找这些运算符,然后对应地更改类型。

类型别名

TypeScript允许使用type关键字声明类型别名:

type PrimitiveArray =  Array<string|number|boolean>;
type MyNumber = number;
type NgScope = ng.IScope;
type Callback = () => void;

类型别名实质上和原来的类型一样,可以让代码可读性更高。然而,如果你在一个而很大的团队中工作,毫无约束地常见类型别名会导致可维护性的问题。

环境声明

环境声明允许在TypeScript代码中创建一个不会被编译到JavaScrip中的变量。这个特性是用来促进与现有JavaScript代码,DOM,还有BOM结合而设计的。

另外

一些特殊的运算符:
A=2,B=3

运算符描述
===比较两个运算元的值和类型是否都相等,如果都相等则结果为true
!===比较两个运算元的值和类型是否都不等,如果都不等则结果为true
&按位与,A&B = 2; //10&11 = 10
^按位异或
~按位取反
<<左移位,移1位相当于乘以2,移2位相当于乘以4
>>有符号右移位操作符,将第一个操作元的二进制形式向右移第二个操作元个比特位,左边用符号填充。
>>>无符号右移操作符。与有符号右移类似,除了左边一律使用0补位。

Alert:通常认为,位操作在TypeScript和JavaScript中并没有那么高效。位操作在Js中效率不如其它语言的原因是,它必须先将操作元从浮点型转换成32位整型进行运算,然后再转回浮点型。

参考:Learning TypeScript中文版


版权声明:本文为yuyangchen123原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。