1.1 基础类型
TypeScript的原始类型(primitive types)有数值型(number)、布尔型(boolean)、字符型(string)、符号型(symbol)、void型、null型、undefined型和用户自定义的枚举类型8种。
1.1.1、数值型
let num1: number = 2;
变量声明数值类型后,不允许将字符类型或布尔类型等不兼容类型赋值给此变量。
1.1.2、布尔型
let isMan:boolean = true;
在typescript中,Number、String和Boolean分别是number、string和boolean的封装对象。
let a:boolean = new Boolean(1); //错误
let b:boolean = Boolean(1); //正确
boolean类型和new Boolean()是不兼容的,但和Boolean()是兼容的。
1.1.3、字符型
let msg:string = "Hello World!";
1.1.4 枚举
枚举类型是对JavaScript标准数据类型的一个补充,用于取值在一定范围内的场景。可以提升代码的可读性,枚举使用enum关键字来定义。
enum Days {Sun, Mon, Tue, Wed, Thu, Fri, Sat};
let today:Days = Days.Sun;
枚举类型的变量实质上只是数值,但也可以对枚举值到枚举名进行反向映射。
enum Days {Sun, Mon, Tue, Wed, Thu, Fri, Sat};
console.log(Days["Sun"] === 0); // true
console.log(Days[2] === "Tue"); // true
枚举常用在下拉框的数据匹配上,label和value值映射。
1.1.5 Symbols
ES6引入的一种新的原始数据类型Symbols,表示独一无二的值,一旦创建就不能更改,且不能设置属性,所以一般作为对象的一个属性。
let sym = Symbol("name");
let sym2 = Symbol("name");
let obj = {
[sym]: "value",
[sym2]: "value2",
name: "value3"
};
console.log(obj);
1.1.6 void
空值(void)表示不返回任何值,一般在函数返回类型上使用,表示没有返回值的函数。
1.1.7 null
null表示不存在对象值,可以用来定义原始数据类型,也可以是值。
1.1.8 undefined
undefined表示变量已经声明但尚未初始化变量的值。undefined和null是所有类型的子类型,即可以赋值给所有类型的变量。它也可以是类型或者是值。
1.2 交叉类型和联合类型
交叉类型,用 & 符号连接,合并后的交叉类型包含所有类型的特性。
联合类型(union types)表示取值可以为多种中的一种,用 | 符号连接。
1.3 数组、元组
1.3.1 数组
typescript中的数组和JavaScript中一致,在此不再赘述。
有两个值得关注的知识点,其一,数组的遍历方式:
1、利用for循环遍历,是通过length属性循环下标来遍历数组的。
2、利用for…in遍历,通过获取属性遍历数组,通常也用于遍历对象的属性。
let a = [1, 2, 3];
for (let i in a) {
console.log(a[i]); // 1 2 3
}
3、利用for…of遍历,直接获取数组中的元素值,推荐的遍历数组和对象的方式。
let arrs = ["a", "b", "c"];
for (let i of arrs) {
console.log(i); // a b c
}
1.3.2 元组
数组合并相同类型的对象(一般,any[]类型的数组可以不同),元组合并不同类型的对象。元组类似关系数据表中的行,列是属性,详见第四章。
let row: [number, string, number] = [1, "abc", 2];
元组声明的时候[]中的类型不能省略,且初始化的个数必须和声明中的类型个数一致,注意是初始化,后期更改可以不一致。
1.3.3 数组(元组)解构
解构是对结构进行分解,ES6允许按照一定的模式从数组和对象中提取值,并将提取的值赋给变量,称为解构。
通常用于变量的批量赋值
// 传统方式
let a = 1;
let b = 2;
let c = 3;
// 解构方式
let [a, b, c] = [1, 2, 3];