一.基础类型
1.布尔值(boolean):同js,true/false
2.数字(number):同js,浮点数。可以表示二进制、六进制、十进制和十六进制
3.字符串(string):同js,支持ES6的模版字符串。
4.数组(Array):数组的定义有两种方法
第一种在元素类型后边接上[]
let arr: Number[] = [1, 2, 3];
第二种使用数组范型:
let arr: Array<number> = [1, 2, 3];
5.元组(Tuple):允许表示一个已知元素数量和类型的数组,元素的类型不必相同。
let list: [string, number];
list = ['hello' , 1];
list = [1, 'hello']; // 会报错
当访问越界的元素时,会使用元素的联合类型(官方文档)。实际试的时候会报错:
6.枚举类型(enum):是对js
标准类型的一个补充。默认从0开始编号,也可以手动指定成员的数值。
enum Animal {dog, cat, pig};
let a: Animal = Animal.dog;
console.log(a);
enum Color {red = 1, yellow, green};
let c: Color = Color.yellow;
console.log(c);
enum Person {per1 = 2, per2 = 1, per3 = 3}
let p: Person = Person.per2;
console.log(p);
编译以后的文件是这样的:
var Animal;
(function (Animal) {
Animal[Animal["dog"] = 0] = "dog"; // 双向赋值
Animal[Animal["cat"] = 1] = "cat";
Animal[Animal["pig"] = 2] = "pig";
})(Animal || (Animal = {}));
;
var a = Animal.dog;
console.log(a);
var Color;
(function (Color) {
Color[Color["red"] = 1] = "red";
Color[Color["yellow"] = 2] = "yellow";
Color[Color["green"] = 3] = "green";
})(Color || (Color = {}));
;
var c = Color.yellow;
console.log(c);
var Person;
(function (Person) {
Person[Person["per1"] = 2] = "per1";
Person[Person["per2"] = 1] = "per2";
Person[Person["per3"] = 3] = "per3";
})(Person || (Person = {}));
var p = Person.per2;
console.log(p);
编译以后的文件中看到枚举类型有一个双向赋值,所以我们也可以这样引用:⬇️
let d: string = Animal[1];
console.log(d);
7.any类型:任意类型。当我们在为变成阶段还不确定类型的变量指定类型时,可以用any
标记,让他们通过编译阶段;可调用any
变量上的任何方法。
当我们只知道部分数据时,也可用any
:
let arr: any[] = ['a' , 1, true];
arr[1] = 'b';
8.void
类型:某种程度上void
类型与any
类型相反,表示没有任何类型。常见情况,当函数没有返回值时,返回值类型为void
。
function fun(): void {
console.log('this is a warning');
}
声明一个void
类型的变量没什么用,因为你只能赋值undefined
和null
。
9.undefined
和null
类型:与void
类型一样,本身没多大的作用。是所有类型的子集,就是说可以把undefined
和null
赋值给任何类型。但当你指定了--strictNullChecks
标记时,undefined
和null
只能赋值给void
和他们各自。
10.never
类型:表示永不存在的值的类型。never
是任何类型的子类型,也可以赋值给任何子类型,没有类型可以赋值给never
类型(除它自己)。
11.object
类型:非原始类型。
12.类型断言:推测一个实体的类型。
let someText: any = '123';
let len = (<string>someText).length; // 尖括号形式
let len = (someText as string).length; // as语法