TypeScript 语法简介
TypeScript 是一种由微软开发的自由和开源的编程语言。它是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程。
TypeScript扩展了JavaScript的句法,所以任何现有的JavaScript程序可以不佳改变的在TypeScript下工作。
TypeScript是为大型应用之开发而设计,而编译时它产生JavaScript以确保兼容性。
TypeScript支持为已存在的JavaScript哭添加类型信息的头文件,扩展了它对于流行的库如jQuery,MongoDB,Node.js和D3.js的支持。
数据类型
TypeScript数据类型包括:Boolean
, Number
,String
, Array
Enum
, Any
, Void
七种。
1. Boolean
类型,取值 true/false
let isDone : boolean = false;
2. Number
类型
let height : number = 925.98;
3. String
类型
let name : string = "Fairy";
4. Array
类型
结合JavaScript种的数组有两种声明方式,一种是 let num = []
,另外一种是let num = new Array()
。
TypeScript声明也有两种声明方式,第一种:
let list : number[] = [1,2,3];
第二种:
let list : Array<number> = [1,2,3];
以上四个类型通过JS的类型应该会更容易理解,接下来的三个类型是TypeScript新增的类型,需要费点心思去了解一下。
5. Enum
类型
TypeScript为JavaScript新增了枚举和这种标准的集合数据类型。和在C#中一样,枚举是为一组数值类型更友好的名称:
//定义枚举
enum Color {Red,Green,Blue};
//引用枚举
let c: Color = Color.Green;
或是手动设置全部的枚举成员:
enum Color {Red = 1,Green = 2,Blue = 4};
let c: Color = Color.Green;
运用枚举类型可以很容易从一个数值类型获取对应枚举名称。例如我们又一个数值类型2,但不确认将匹配哪一个枚举成员,那么我们可以如下使用:
enum Color {Red = 1,Green,Blue};
console.log(Color) //{1: "Red", 2: "Green", 3: "Blue", Red: 1, Green: 2, Blue: 3}
let colorName: string = Color[2];
console.log(colorName); //Green
let colorName: number = Color["Red"];
console.log(colorName); // 1
6. Any
类型
变量的值会动态改变时,比如来自用户的输入,任意值类型可以让这些变量跳过编译阶段的类型检查, 如下:
let notSure: any = 4; //数字类型
notSure = "maybe a string instead"; //字符串类型
notSure = false; //布尔类型
any
类型是一种强大的兼容存在的JavaScript库的类型系统。any
类型对应于我们只知道部分数据类型,但是不是所有的数据类型的类型系统。例如一个混合了多种类型的集合数组。
let list:any[] = [1, true, "free"];
list[1] = 100;
7. Void
类型
和 any
相对的数据类型则是 void
,它代表没有任何数据类型。通常用于表示一个方法没有任何返回值:
warnUser(): void {
console.log("This is my warning message");
}
8. 元组
类型
元组类型用来表示已知元素数量和类型的数组,各元素的类型不必相同,对应位置的类型需要相同
let x: [string, number];
x = ['Runoob', 1]; // 运行正常
x = [1, 'Runoob']; // 报错
console.log(x[0]); // 输出 Runoob
9. null
& undefined
类型
null
表示对象值缺失。
undefined
用于初始化变量为一个未定义的值
如果一个类型可能出现 null 或 undefined, 可以用 | 来支持多种类型
// 启用 --strictNullChecks
let x: number | null | undefined;
x = 1; // 运行正确
x = undefined; // 运行正确
x = null; // 运行正确
10. never
类型
never
是其他类型(包括 null
和 undefined
)的子类型,代表从不会出现的值。
这意味着声明为 never 类型的变量只能被 never 类型所赋值,在函数中它通常表现为抛出异常或无法执行到终止点(例如无限循环)。
// 启用 --strictNullChecks
let x: never;
let y: number;
// 运行错误,数字类型不能转为 never 类型
x = 123;
// 运行正确,never 类型可以赋值给 never类型
x = (()=>{ throw new Error('exception')})(); //运行正确并抛出错误 exception
// 运行正确,never 类型可以赋值给 数字类型
y = (()=>{ throw new Error('exception')})(); //运行正确并抛出错误 exception
// 返回值为 never 的函数可以是抛出异常的情况
function error(message: string): never {
throw new Error(message);
}
// 返回值为 never 的函数可以是无法被执行到的终止点的情况
function loop(): never {
while (true) {}
}