阿强的TypeScript基础
TypeScript是什么?
TypeScript是JavaScript的超集,能够提供类型检查,具有更严格的编程思维。
强类型语音与弱类型语言
强类型语音:对数据类型有严格限制,除非进行强制转换
弱类型语言:没有严格限制,可以直接进行转换。
动态类型语言和静态类型语言
动态类型语言:在编译阶段确定所有的变量类型
静态类型语言:在执行阶段确定所以变量的类型
类型注解
作用:相当于强类型语言中的类型声明
语法:(变量/函数):type
基本数据类型
在ts中所有类型都需要被定义,就是上面所说的类型注解。常见的比如布尔值,数字,字符串,代码如下
基本类型
let bool: boolean = true
let num: number | undefined | null = 123 // |代表联合定义,可以支持多种类型的值
let str: string = 'abc'
数组
下面的两种方式都可以实现定义一个数组
// 数组
let arr1: number[] = [1, 2, 3]
// 该数组只允许添加数字 | 代表联合类型
let arr2: Array<number | string> = [1, 2, 3, '4']
元组
元组可以添加元素,但是在访问的时候会限制,所以不建议去修改元组
let tuple: [number, string] = [0, '1']
// tuple.push(2) 允许添加,不允许访问,有长度和类型限制
// console.log(tuple)
// tuple[2]
函数
函数需要对参数进行类型限制,也可对返回值进行限制,但是ts可以自己判断返回值的类型,所以我们可以不用对返回值进行限定
// 函数 返回值类型ts自己会推断,num + num 就是num 和js的实际语法一样
let add = (x: number, y: number) => x + y
let compute: (x: number, y: number) => number
compute = (a, b) => a + b
对象
对象就和js类似,只是对参数有限制
// 对象
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) false
其他
// undefined, null
let un: undefined = undefined
let nu: null = null
num = undefined
num = null
// void
let noReturn = () => {}
// any 是对js的支持
let x
x = 1
x = []
x = () => {}
// never
let error = () => {
throw new Error('error')
}
let endless = () => {
while(true) {}
}
枚举类型
枚举类型就是常见的1,2,3,4,5,6依次向下的数据类型。可以解决我们常见的硬编码的问题,提高代码的可维护性。
// 数字枚举 如果不赋值,就会依次加1,里面的变量就是12345
enum Role {
Reporter = 1,
Developer,
Maintainer,
Owner,
Guest
}
// 字符串枚举
enum Message {
Success = '恭喜你,成功了',
Fail = '抱歉,失败了'
}
// 异构枚举
enum Answer {
N,
Y = 'Yes'
}
// 枚举成员 在计算属性后面的变量必须赋一个初始值,否则无法获取到数值
// Role.Reporter = 0
enum Char {
// const member
a,
b = Char.a,
c = 1 + 3,
// computed member
d = Math.random(),
e = '123'.length,
f = 4
}
// 常量枚举 编译阶段会删除,减少不必要的代码,如果只是为了获取其中的数据可以使用常量枚举
const enum Month {
Jan,
Feb,
Mar,
Apr = Month.Mar + 1,
// May = () => 5
}
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
// console.log(e === f)
let e1: E.a = 3
let e2: E.b = 3
let e3: E.a = 3
// console.log(e1 === e2)
// console.log(e1 === e3)
let g1: G = G.a
let g2: G.a = G.a