TypeScript基础入门 - 枚举 - 联合枚举与枚举成员的类型

转发node

TypeScript基础入门 - 枚举 - 联合枚举与枚举成员的类型

项目实践仓库git

https://github.com/durban89/typescript_demo.git
tag: 1.3.7

为了保证后面的学习演示须要安装下ts-node,这样后面的每一个操做都能直接运行看到输出的结果。github

npm install -D ts-node

后面本身在练习的时候能够这样使用typescript

npx ts-node 脚本路径

枚举

使用枚举咱们能够定义一些带名字的常量。 使用枚举能够清晰地表达意图或建立一组有区别的用例。 TypeScript支持数字的和基于字符串的枚举。npm

联合枚举与枚举成员的类型

存在一种特殊的非计算的常量枚举成员的子集:字面量枚举成员。 字面量枚举成员是指不带有初始值的常量枚举成员,或者是值被初始化为ide

  • 任何字符串字面量(例如: "foo", "bar", "baz")
  • 任何数字字面量(例如: 1, 100)
  • 应用了一元 -符号的数字字面量(例如: -1, -100)

当全部枚举成员都拥有字面量枚举值时,它就带有了一种特殊的语义。学习

首先,枚举成员成为了类型! 例如,咱们能够说某些成员 只能是枚举成员的值:spa

enum ShapeKind {
    Circle,
    Square,
}

interface Circle {
    kind: ShapeKind.Circle,
    radius: number,
}

interface Square {
    kind: ShapeKind.Square,
    sideLength: number,
}

let c: Circle = {
    kind: ShapeKind.Square,
    redius: 100,
}


运行后会有以下错误提示code

$ npx ts-node src/generics_8.ts
⨯ Unable to compile TypeScript:
src/generics_8.ts(17,5): error TS2322: Type 'ShapeKind.Square' is not assignable to type 'ShapeKind.Circle'.


另外一个变化是枚举类型自己变成了每一个枚举成员的 联合。 虽然咱们尚未讨论[联合类型](./Advanced Types.md#union-types),但你只要知道经过联合枚举,类型系统可以利用这样一个事实,它能够知道枚举里的值的集合。 所以,TypeScript可以捕获在比较值的时候犯的愚蠢的错误。 例如:blog

enum E {
    Foo,
    Bar,
}

function f(x: E) {
    if (x !== E.Foo || x !== E.Bar) {
        
    }
}


运行后会有以下错误提示

$ npx ts-node src/generics_8.ts
⨯ Unable to compile TypeScript:
src/generics_8.ts(27,23): error TS2367: This condition will always return 'true' since the types 'E.Foo' and 'E.Bar' have no overlap.


这个例子里,咱们先检查 x是否不是 E.Foo。 若是经过了这个检查,而后 ||会发生短路效果, if语句体里的内容会被执行。 然而,这个检查没有经过,那么 x则 只能为 E.Foo,所以没理由再去检查它是否为 E.Bar。

本实例结束实践项目地址

https://github.com/durban89/typescript_demo.git
tag: 1.3.8
相关文章
相关标签/搜索