注:本笔记参考TypeScript中文网。https://www.tslang.cn/index.html
TypeScript支持JavaScript几乎相同的数据类型,此外还提供实用的枚举类型。JavaScript的内容请参考JavaScript相关章节。
例子:
let a:boolean = false;
所有数字都是浮点数,类型是number,支持十进制,十六进制,二进制,八进制字面量。
例子:
let a:number = 3;
let a:number = 0xf0dd;
可以使用单引号和双引号表示字符串字面量。
例子:
let s:string = "hello";
还可以使用模板,带模板的字符串使用反引号,如:
let s:string=`I'll be ${age + 1} years old next month`; //其中age是个变量
简单的数组定义:
let list: number[] = [1, 2, 3];
使用泛型数组:
let list: Array<number> = [1, 2, 3];
泛型规定了这个数组只接受number类型的元素。
元组类型表示一个已知元素数量和类型的数组。
定义tuple:
// Declare a tuple type
let x: [string, number];
x = ['hello', 10]; // OK
x = [10, 'hello']; // Error
注意:
定义枚举:
enum Color {Red, Green, Blue};
let c: Color = Color.Green;
默认情况下,从0开始为元素编号。也可以全部使用手动编号。
使用any:
let notSure: any = 4;
notSure = "maybe a string instead";
notSure = false; // okay, definitely a boolean
any类型可以避免编译器类型检查。在必须使用动态类型时,可以使用any。
注意:any就像Java中使用Object类型一样,但是TypeScript(JavaScript)中Object却不能这样使用,因为声明为Object类型就不能调用具体类型的方法了。
void与any相反,表示没有任何类型,函数没有返回值时,可以声明返回值类型为void。
声明为void的变量,只能赋值null和undefined。
null和undefined也是类型,他们的值就只能是null和undefined,他们是所有类型的子类,因此也可以赋值给number等。
never表示永远不存在的值的类型。用在总是会抛出异常或根本不存在的函数表达式。
// 返回never的函数必须存在无法达到的终点
function error(message: string): never {
throw new Error(message);
}
// 返回never的函数必须存在无法达到的终点
function infiniteLoop(): never {
while (true) {
}
}
通过类型断言告诉编译器,你已经确定了这个变量的类型,例如可以把any转换成string,相当于Java的类型向下转型。
let a:any = "hello";
let b:string = (a as string);
var是旧JavaScript的声明变量的方式,新的EcmaScript 规定了let和const取代var,let具有块级作用域,const则是在let基础上声明常量,常量是不可更改的。
通常,建议使用let和const,因为其他大部分语言都是具有块级作用域和常量的,var声明使用不当会造成难以发现的bug。