阿强的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
原文地址:https://www.cnblogs.com/swearBM/p/14321618.html