# typescript学习笔记(day1)
随着前端日益发展,typescript地位在前端领域是越来越突出,弱类型的语言总是让我们又爱又恨,typescript弥补了javascript的一些缺点。
# 原始类型
let bool: boolean = false
let num: number = 1
let str: string = 'abc'
// 类型之间不可互相赋值
// str = 1 // error
1
2
3
4
5
2
3
4
5
# 数组(两种声明方式)
let arr1: number[] = [1, 2, 3, 4]
let arr2: Array<number> = [1, 2, 3, 4]
// 联合类型 可以使数组里面元素类型多样化
let arr3: Array<number | string> = [1, 2, 3, '4']
const arr: (string | number | boolean)[] = [1, '2', true];
// 以上例子都是存储的基础类型数据,对象类型也是可以的
// type alias 类型别名
type People = { name: string, age: number, sex: string };
const peopleArr: People[] = [{ name: 'Tom', age: 23, sex: 'men' }];
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 元组类型
WARNING
元组可以理解为一个长度,每一项元素类型都确定的数组, 一一对应关系,不能多不能少,跟数组有差别
let tuple: [number, string] = [1, 'abc']
//只能添加声明过的类型(这里只能添加number或者string)
// tuple.push(false) // error
1
2
3
2
3
WARNING
元组越界问题(总结:可以添加数据,但是不可越界访问)
// 可以往元组里添加元素
tuple.push('11')
tuple.push(11)
// console.log(tuple[2]) // error 越界访问不可以
1
2
3
4
2
3
4
# 函数
这里函数返回类型可以不写,这是利用ts类型自动推断功能
let add = (x: number, y: number) => x +y
let add = (x: number, y: number): number => x +y
1
2
2
函数类型(没有具体实现函数,只是定义一个函数类型(参数类型+返回值类型))
let compute: (x: number, y: number) => number
1
具体实现函数体(这里就不需要定义参数类型和返回值类型)
compute = (a, b) => a + b
1
# 对象
此时只是简单定义他是object类型,并没有定义对象里面属性的类型
let obj: object = {x: 1, y: 2}
obj.x = 5 // error
1
2
2
具体定义:
let obj: {x: number, y: number} = {x: 1, y: 2}
obj.x = 9
1
2
2
# symbol
let s1: symbol = Symbol()
let s2 = Symbol()
console.log(s1 === s2) // false
1
2
3
2
3
# undefined null
不能赋值其他类型,只能赋值它本身
let un: undefined = undefined
let nu: null = null
1
2
2
TIP
那么其他变量可以赋值undefined null吗?
//(官方文档:undefined和null是任何类型的子类型.
//因此是可以赋值给其他变量,但是默认处于严格模式不可以赋值,我们可以修改tsconfig.json里面的strictNullChecks: false就可以)
let num11:number = 1
num11 = undefined // 不报错
num11 = null // 不报错
// 如果不想修改tsconfig.json, 又想兼容呢?我们改怎么去写?我们可以使用联合类型
let num22:number | undefined | null = 1
num22 = undefined
num22 = null
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# void
javascript中void是一个操作符 让任何表达式返回undefined
let i = void 2; // i === undefined
1
typescript中如果方法没有返回值,那么此方法的返回值类型就是void类型
void类型是any类型的子类型,是null和undefined类型的父类型
void 0
let noReturn = (): void => {}
let noReturn1 = () => {}
1
2
3
2
3
# any
TIP
默认不声明类型他就是any类型,他可以赋值给任何类型
let x
x = 1
x = []
x = 'abc'
x = () => {}
1
2
3
4
5
2
3
4
5
# never
表示永远不会有返回值的类型
let erro = () => {
throw new Error('error')
}
let endless = ():never => {
while(true){}
}
1
2
3
4
5
6
2
3
4
5
6
# 小记
关于void 和 never两种类型博主还是不是很理解,有知道小伙伴可以在评论区发表自己的看法,大家一起学习一起进步