二、数据类型

# 二、数据类型
# ES6的数据类型
- Boolean
- Number
- String
- Array
- Function
- Object
- Symbol
- undefined
- null
# TypeScript的数据类型
- Boolean
- Number
- String
- Array
- Function
- Object
- Symbol
- undefined
- null
- void
- any
- never
- 元组
- 枚举
- 高级类型
# 类型注解
作用:相当于强类型语言中的类型声明 语法:(变量/函数):type
// 原始类型
let bool: boolean = true
let num: number | undefined | null = 123
let str: string = 'abc'
// str = 123
// 数组
let arr1: number[] = [1, 2, 3]
let arr2: Array<number> = [1, 2, 3]
let arr3: Array<number | String> = [1, 2, 3, '4']
// 元组
let tuple: [number, string] = [0, '1']
// 元组越界,可以通过push添加,但不可以访问
// tuple.push(2)
// console.log(tuple)
// tuple[2]
// 函数
let add = (x: number, y: number) => x + y
let compute: (x: number, y: number) => number
compute = (a, b) => a + b
// 对象
// let obj: object = {x: 1, y: 2}
let obj: {x: number, y: number} = {x: 1, y: 2}
obj.x = 3
// symbol 具有唯一的值
let s1: symbol = Symbol()
let s2 = Symbol()
console.log(s1 === s2)
// undefined,null
let un: undefined = undefined
let nu: null = null
num = undefined
num = null
// void 操作符 没有返回值的函数
let noReturn = () => {}
// any:ts中,未定义类型,默认为any类型
let x
x = 1
x = []
x = () => {}
// never:永远不会有返回值的类型
// 抛错
let error = () => {
throw new Error('error')
}
// 死循环
let endless = () => {
while(true) {}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# 枚举
枚举:一组有名字的常量集合 枚举分为:数字枚举,字符串枚举,异构枚举
- 数字枚举
枚举被编译成一个对象,首先,枚举成员的名称作为key,枚举成员的值作为value,这个表达式也直接返回value,然后value作为key,名称作为value,这种方法叫做反向映射 - 字符串枚举
字符串枚举不可以做反向映射 - 异构枚举:是数字枚举和字符串枚举的结合,容易引起混淆,不建议使用
# 枚举成员

# 常量枚举
常量枚举在编译后,会被移除,当我们不需要一个对象,只需要一个值的时候,就可以使用常量枚举,这样可以减少我们编译后的代码


// 数字枚举
enum Role {
Reporter = 1,
Developer,
Maintainer,
Owner,
Guest
}
console.log(Role.Developer)
console.log(Role)
// 字符串枚举
enum Message {
Success = '恭喜你,成功了',
Fail = '抱歉,失败了'
}
// 异构枚举
enum Answer {
N,
Y = 'Yes'
}
// 枚举成员的值为只读,不可修改
// Role.Reporter = 2
// 枚举成员的分类:
// const(常量枚举):1、没有初始值 2、对已有成员的引用 3、常量表达式
// computed(需要被计算的枚举成员,非常量的表达式): 这些表达式不会在编译阶段计算,会在执行的时候计算
// computed 必须被赋值
enum Char {
// const
a,
b = Char.a,
c = 1 + 2,
// computed
d = Math.random(),
e = '123'.length
}
// 常量枚举
const enum Month {
Jan,
Feb,
Mar
}
let month = [Month.Jan, Month.Feb, Month.Mar]
// 枚举类型
enum E { a, b}
enum F { a = 0, b = 1}
enum G { a = 'apple', b = 'banana' }
let e: E = 3
let f: F = 3
// 不同枚举成员类型不可比较,同一枚举成员类型可以比较
// e === f
let e1: E.a = 1
let e2: E.b
// e1 === e2
let e3: E.a = 1
e1 === e3
let g1: G = G.b
let g2: G.a = G.a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
上次更新: 2021/04/22, 00:08:06