基础类型
TypeScript除了支持与JaveScript几乎相同的数据类型,还支持实用的枚举类型。
布尔值
let isDone: boolean = false;
数字
和JavaScript一样,TypeScript里的所有数字都是浮点数。
这些浮点数的类型是 number。除了支持十进制和十六进制字面量,TypeScript还支持ES6中引入的二进制和八进制字面量。
字面量
有专门的解释,也就是等号右面的赋值,可以是“”,也可以引号中有值。
let decLiteral: number = 6; // 十进制
let hexLiteral: number = 0xf00d; //十六进制
let binaryLiteral: number = 0b1010; // 二进制
let ocralLiteral: number = 0o744; // 八进制
字符串
使用string
表示文本类型的数据。和JavaScript一样,使用双引号( "
)或者单引号( '
)表示字符串。
let name: string = "hehe";
name = "zhang";
还可以使用模板字符串,可以定义多行文本和内嵌表达式。
这种字符串是被反引号(`),并且以 ${expr}这种形式嵌入表达式的。
let name: string = "hehe";
let age: number = 18;
let sentence: string = ` Hello, my name is ${name}.
I'll be ${age+1} years old next month.`;
这与下面定义的sentence
的效果相同。
let sentence: string = "Hello, my name is " + name + ".\n\n" +
"I'll be " + (age + 1) + " years old next month.";
数组
TypeScript有两种方式可以定义数组。
* 可以在元素类型后面接上 []
,表示由此类型原色组长的数组
let list: number[] = [1,2,3];
- 使用数组泛型,
Array<元素类型>
let list: Array<number> = [1,2,3];
元组 Tuple
元祖类型表示一个一直原色数量和类型的数组,各元素的类型不必相同。类似于map。
let x: [string, number];
x = ['hehe', 18]; // ok
x = [18, 'hehe']; // error
顺序必须保持一致!
枚举
enum
类型是对JaveScript标准数据类型的一个补充。像C#一样,使用枚举类型可以为一组数值赋予友好的名字。
enum Color {Red, Green, Black, Blue};
let c: Color = Color.Red;
默认情况下,从0开始为元素编号。你也可以手动的指定成员的数值。
enum Color {Red = 1, Green, Black, Blue};
et c: Color = Color.Red;
-----------------------------------------
enum Color {Red = 1, Green = 2, Black = 4, Blue = 7};
let c: Color = Color.Red;
枚举类型提供的便利就是你可以有枚举的值得到它的名字。例如,我们知道数值为2,但是不确定它映射到Color里的哪个名字,我们可以查找相应的名字:
enum Color {Red = 1, Green = 2, Black = 4, Blue = 7};
let colorName: string = Color[2];
alert(colorName);
任意值
当我们不清楚是什么值时,我们可以使用any
类型来标记这些变量。
let notSure: any = 3;
在对现有代码进行改写的时候,any
类型十分有用的,它允许你在编译时可选择性的包含或者移除类型检查。
你可以能认为,object
有相似的作用,就像它在其他语言中那样。但是object
类型的变量只是允许你给它赋任意值,但是却不能够在它上面调用任意的方法,即便有这些方法。
let notSure: any = 4;
notSure.ifItExists(); // okay, ifItExists might exist at runtime
notSure.toFixed(); // okay,toFixed exists (but the compiler doesn't check)
let prettySure: Object = 4;
prettySure.toFixed(); // Error: Property 'toFixed' doesn't exist on type 'Object'.
空值
void
类型像是与any
类型相反,它表示没有任何类型。当一个函数没有返回值时,通常会见到其返回类型是void
。
声明一个void
类型的变量没有什么大的用处,因为你只能为它赋予undefined
和null
。
Null 和 Undefined
TypeScript里,undefined
和null
两者各有自己的类型分别叫做undefined
和null
,和void
想死,他们的本身的类型用处不是很大。
默认情况下,null
和undefined
是所有类型的子类型。就是说你可以把null
和undefined
赋值给number类型的变量。
类型断言
类型断言好比其他语言中的强制类型转换,但是不进行特殊的数据检查和解构。它没有运行时的影响,只是在编译阶段起作用。
类型断言有两种形式:
* “尖括号”语法
let someValue: any = "this is a string.";
let strLength: number = (<string>someValue).length;
- “as”语法
let someValue: any = "this is a string.";
let strLength: number = (someValue as string).length;
两种形式是等价的。但是,当你在TypeScript里使用JSX时,只有as
语法断言是被允许的。
写在后面
GitHub上集大家之力搞了一个前端面试题的项目,里面都是大家面试时所遇到的题以及一些学习资料,有兴趣的话可以关注一下。如果你也有兴趣加入我们的话,请在项目中留言。项目同时也可以在gitbook上查看。