zoukankan      html  css  js  c++  java
  • 阿强的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
    
  • 相关阅读:
    软件工程个人作业01
    个人冲刺——(五)
    个人冲刺——(四)
    个人冲刺——(三)
    个人冲刺——(二)
    个人冲刺——(一)
    单词统计
    第十周学习总结
    第九周学习总结
    用户模板场景分析
  • 原文地址:https://www.cnblogs.com/swearBM/p/14321618.html
Copyright © 2011-2022 走看看