TypeScript初识之枚举类型

一、什么是弱类型语言?强类型语言?

强类型是指不允许隐式变量类型转换,弱类型则允许隐式类型转换。

换句话说:
强类型语言,当你定义一个变量是某个类型,如果不经过代码显式转换(强制转化)过,它就永远都是这个类型,如果把它当做其他类型来用,就会报错

弱类型语言,你想把这个变量当做什么类型来用,就当做什么类型来用,语言的解析器会自动(隐式)转换。

let a = 1;
let b = 'a';
console.log(a + b)
let a : number = 2;
let b : string = 'b';
let c : number
c = a + b

二、什么是静态类型语言?动态类型语言?

静态类型语言:在编译阶段确定所有变量的类型

  • 对类型极度严格
  • 立即发现错误
  • 运行时性能好
  • 自文档化

动态类型语言:在执行阶段确定所有变量的类型

  • 对类型非常宽松
  • Bug可能隐藏数月甚至数年
  • 运行时性能差
  • 可读性差

![image-20200818104748909](/Users/zhoupanpan/Library/Application Support/typora-user-images/image-20200818104748909.png)

三、类型注解

作用:相当于强类型语言中的类型声明

语法:(变量 / 函数):type

TypeScript 的数据类型介绍

  • Boolean
  • Number
  • String
  • Array
  • Function
  • Object
  • Symbol
  • undefined
  • null
  • void
  • any
  • never
  • 元祖
  • 枚举
  • 高级类型(本次暂不介绍)
// 原始类型
let bool : boolean = true
let num : number = 123
let str : string = 'abc'

// 数组
let arr1 : number[] = [1, 2, 3]
let arr2 : Array<number> = [1, 2, 3]
let arr3 : Array<number | string> = [1, 2, 3, '4', '4']

// 元祖 不能任意添加
let tuple : [number, string] = [0, '3']

// 函数
let add = (x: number, y: number) => x + y
let compute: (x: number, y: number) => number
compute = (a, b) => a + b;

// 对象
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)

// undefined, null
let un : undefined = undefined
let nu : null = null

// void
let noReturn = () => {}

// any
let x
x = 1
x = []
x = () => {} // 不建议使用

// never
let error = () => {
    throw new Error('error')
}

// 枚举内容无法修改
// 数字枚举
enum Role {
    Reporter = 1,
    Developer,
    Maintainer,
    Owner,
    Guest
} 

// 字符串枚举 
enum Message {
    Success = '恭喜你,成功了',
    Fail = '抱歉,失败了'
}

// 异构枚举
enum Answer {
    N,
    Y = 'yes'
} // 易引起混淆 不建议使用


// 枚举成员 在需要被计算的后面定义变量 必须要给初始值
enum Char {
    // const 
    a,
    b = Char.a,
    c = 1 + 3,
    // computed
    d = Math.random(),
    e = '123'.length,
}

// 常量枚举 编译后会清空,多用于不需要对象,只需要对象的值时,减少编译环境的代码
const enum Month {
    Jan = 3,
    Feb,
    Mar
}
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
// e === f

let e1 : E.a = 1
let e2 : E.b
// e1 === e2
let e3 : E.a = 1
// e1 === e3

let g1 : G = G.b   // 字符串只能是其自身
let g2 : G.a = G.a
// g1 === g2

总结:若将javascript比作一匹野马,那么typescript则是控制野马的缰绳。有了它,我们将在前端领域更好的驰骋,避免翻车,避免代码上线脊背发凉。。。

上一篇:Python 枚举(Enum)


下一篇:C#获得枚举值实例