基本类型
类型注解
- 作用:相当于强类型语言的类型声明
- 语法:(变量/函数):type
原始类型
//原始类型
let bool:boolean = true;
let num:number = 123;
let str:string = 'asd'
如果将str变量改成number类型,就会提示报错,ts不允许改变变量的数据类型

数组类型
- 两种定义方式
//数组类型
let arr1:number[] = [1,2,3]
let arr2:Array<number> = [1,2,3]
- ts只允许数组中包括一种数据类型的值,在数组arr1中添加字符串类型的值就会报错

- 如果想为数组添加不同类型的值,需要使用联合类型
//联合类型
let arr1:number[] | string[] = [1,2,3]
let arr2:Array<number | string> = [1,2,3]
元组类型
- 限定了数组的类型和个数,数组值必须安装声明变量时的类型一致,个数必须一致,否则都会报错。
let tuple:[number,string] = [1,'a'] //正确
let tuple2:[number,string] = ['a','a'] //错误,不能将字符串a赋值给nuumber
let tuple3 = [number,string] = [1,'a',3] //错误,数组中只能有两个值
- 元组越界问题:向元组中push一个值
let tuple:[number,string] = [1,'a']
tuple.push(2)
console.log(tuple) //[1,'a',2],可以看出可以向tuple使用push方法添加
//但是不能访问,会报错。
tuple[2]

函数
let add = (x:number,y:number):number => x+y;
- ts要求给函数参数提供类型值,返回值一般不需要提供类型值,ts会自动使用推导出返回值类型。
对象
let obj:object = {
a:1,
b:2,
}
// 这样写不允许修改对象的变量值
obj.a = 3 //报错
正确做法:给变量直接赋值对应的类型
let obj2:{a:number,b:number} = {
a:1,
b:2,
}
obj2.a = 3 //正确
Symbol
- 具有唯一的值
- 两种定义方式
let s1:symbol = Symbol()
let s2 = Symbol()
//此时s1和s2是不相等的
console.log(s1 === s2) //false
null 和 undefined
let nu:null = null;
let un:undefined = undefined;
void
- 让任何表达式返回undefined
- 没有任何返回值
let noReturn = () => {}
any
- 可以是任何类型的值
never
- 永远不会有返回值
let error = () => {
throw new Error('err')
}
let endless = () => {
while(true){
}
}
枚举类型
- 一组有名字的常量集合
数字枚举
- 使用enum定义枚举
// 正常枚举值是从0开始
enum Role {
Reporter, //0
Developer, //1
Main, //2
Owner, //3
Guest, //4
}
console.log(Role.Reporter) //0
//自定义枚举值,自定义后的值,需要一次往下递增
enum Role2 {
Reporter == 1, //1
Developer, //2
Main, //3
Owner, //4
Guest, //5
}
- 打印一下Role,是个对象。可以根据key和value索引

- 枚举的实现原理:反向映射,看下图

字符串枚举
enum Msg {
Success = '成功',
Erros = '失败'
}
- 字符串枚举不可以反向映射

异构枚举
- 就是字符串枚举和数字枚举混用,不推荐使用
enum Answer {
N,
Y = 'yes'
}
枚举成员性质
- 不能修改定义后的枚举值
enum Char {
//常量枚举
a,
b = Char.a,
c = 1+ 3,
//需要被计算的枚举成员
d = Math.random(),
e = '123'.length
}
-
常量枚举(三种):会在编译时编译出结果
- 没有初始值
- 对已有枚举成员的引用
- 常量表达式
-
需要被计算的枚举成员
- 在执行时才会计算出结果
-
看下编译结果
- 常量枚举:在编译时编
- 需要被计算的枚举成员:没有编译出结果

常量枚举
- 用const声明的枚举
const enum Month {
Jan,
Feb
}
- 会在编译阶段会被移除

枚举类型
enum E {a,b} //没有值
enum F {A=0,B=1} //数字枚举
enum G {a='a',b='b'} //字符串枚举