TypeScript入门(四)

51 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第4天,点击查看活动详情

大家好,我是吃鱼的老鼠.最近在学习ts,有些心得来分享一下

在线练习网站

官方文档

四.枚举类型

在TS中枚举通常用来定义常量,支持数字字符串的枚举.

1. 数字枚举

enum Direction {   
   North,
   South,
   East,
   West
}

console.log(Direction.North)  // 0
console.log(Direction.South)  // 1
console.log(Direction.East)   // 2
console.log(Direction.West)   // 3

枚举的成员默认为数字0开头,依次递增.

枚举也可以反向映射

console.log(Direction[0]) // "North" 
console.log(Direction[1]) // "South" 

也可自定义数值

enum Direction {   
    North = 66,
    South = 68,
    East = 78,
    West = 99
}

console.log(Direction.North) // 66
console.log(Direction.South) // 68
console.log(Direction.East)  // 78
console.log(Direction.West)  // 99

antd Pro中就使用了数字枚举来定义错误类型

// 错误处理方案: 错误类型
enum ErrorShowType {
  SILENT = 0,
  WARN_MESSAGE = 1,
  ERROR_MESSAGE = 2,
  NOTIFICATION = 3,
  REDIRECT = 9,
}

2. 字符串枚举

字符串枚举里,每个成员都必须用字符串字面量

// 由于字符串枚举没有自增长的行为,字符串枚举可以很好的序列化(增加可读性)
enum Direction {   
    North = 'North',
    South = 'South',
    East = 'East',
    West = 'West'
}

3. 异构枚举(Heterogeneous enums)

一个枚举中同时包含数字和字符串

enum IsRaining {
    No = 0,
    Yes = '下雨'
}
// 一般不要这么写

五. 类型推论

在TypeScript里,有些没有明确指出类型的地方,类型推论会帮助提供类型

例如:

let str = 'happy'

变量str的类型被推断为字符串。 这种推断发生在初始化变量和成员,设置默认参数值和决定函数返回值时。

最佳通用类型

当从表达式中推断类型时候,会使用这个表达式的类型来推断出一个最合适的通用类型

let myArr1 = [false, 1, null, 'haha'];

image.png

变量myArr就推断出了 string|number|boolean|null这些类型.