转发node
项目实践仓库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
当全部枚举成员都拥有字面量枚举值时,它就带有了一种特殊的语义。学习
首先,枚举成员成为了类型! 例如,咱们能够说某些成员 只能是枚举成员的值: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