类型
TypeScript通过向JavaScript增加可选的静态类型声明来把JavaScript变成强类型的程序语言。
当一个变量的类型无法被推测时,一个特殊的类型 any会作为他的类型
| 类型 | 描述 |
|---|---|
| boolean | var isDone: boolean = false; |
| number | 所有的数字在TypeScript中都是浮点数。 var height: number = 6; |
| string | var name:string = "bob"; name = 'smith'; |
| array | var list:number[] = [1,2,3]; var list:Array<number> = [1,2,3]; |
| enum | enum Color {Red, Green, Blue}; var c: Color = Color.Green; |
| any | any类型可以表示任意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中文版