//枚举
//支持数字枚举和基于字符串的枚举
enum Direction{
Up =1,
Down,
Left,
Right,
}
//此处将Up初始化为1,则其他成员会从1开始自动增长。
//没有初始化时,从开始自动增长
//使用枚举属性访问枚举成员
enum response{
No=0,
Yes =1,
}
function respond(recipient:string,message:response):void {
//..
}
respond('Princess Caroline',response.Yes);
//不带初始化器的枚举 或者被放在第一的位置,或者被放在使用了数字敞亮或其他常量初始化了的枚举后面。
//如以下情况不被允许,报错
// enum E{
// A =getSomeValue(),
// B,
// }
//字符串枚举
//每个成员都必须用字符串字面量,或另外一个字符串成员进行初始化
enum Directionc{
Up = 'UP',
Down = 'DOWN',
Left = 'LEFT',
Right = 'RIGHT',
}
//数字枚举时,其值很难访问,字符串枚举时提供一个可读值,独立于枚举成员的名字。
//异构枚举
//它不带有初始化器且它之前的枚举成员是一个 数字常量。 这种情况下,当前枚举成员的值为它上一个枚举成员的值加1。
enum E2 {
A = 1, B, C
}
//字面量枚举成员的类型
//字面量枚举成员是指不带有初始值的常量枚举成员,或者是值被初始化为
//1、任何字符串字面量
//2、任何数字字面量
//3、应用了一元 - 符号的数字字面量
//当所有枚举成员都拥有字面量枚举值时,它就带有了一种特殊的语义。
// 首先,枚举成员成为了类型! 例如,我们可以说某些成员 只能是枚举成员的值:
// enum ShapeKind{
// Circle,
// Square,
// }
// interface Circle{
// kind:ShapeKind.Circle,
// radius:number,
// }
// interface Square{
// kind:ShapeKind.Square;
// sideLength:number;
// }
// let c:Circle = {
// kind :ShapeKind.Square,
// //报错,此值只属于CIRCLE
// radius:100,
// }
//
// //枚举类型编程每个枚举成员的联合
// enum E{
// Foo,
// Bar,
// }
// function f(x:E) {
// if(x!==E.Foo||x!==E.Bar){
// //报错。此处类型系统可以指导枚举里的值的集合
// //我们先检查 x是否不是 E.Foo。 如果通过了这个检查,然后 ||会发生短路效果, if语句体里的内容会被执行。 然而,这个检查没有通过,那么 x则 只能为 E.Foo,因此没理由再去检查它是否为 E.Bar。
// }
// }
// function f(obj:{X:number}) {
// return obj.X;
// }
// f(E2)//此处当E中有X 属性时可以运行。
//反向映射
//可以从枚举值到枚举名
enum Enum{
A
}
let a = Enum.A;
let nameOfA = Enum[a];//'A'
//不会为字符串枚举成员生成反向映射
//const 枚举
//常量枚举只能使用常量枚举表达式,并且不同于常规的枚举,他们在编译阶段会被删除。
//常量枚举成员在使用的地方会被内联进来。之所以可以这么做是因为,常量枚举不允许包含计算成员。
// const enum Directions{
// Up,
// Down,
// Left,
// Right
// }
// let directions = {
// Directions.Up,
// Directions.Down,
// }
//外部枚举
declare enum Enum2{
B,
C,
}
//外部枚举和非外部枚举之间有一个重要的区别,在正常的枚举里,没有初始化方法的成员被当成常数成员。 对于非常数的外部枚举而言,没有初始化方法时被当做需要经过计算的。
//枚举
//支持数字枚举和基于字符串的枚举
enum Direction{
Up =1,
Down,
Left,
Right,
}
//此处将Up初始化为1,则其他成员会从1开始自动增长。
//没有初始化时,从开始自动增长
//使用枚举属性访问枚举成员
enum response{
No=0,
Yes =1,
}
function respond(recipient:string,message:response):void {
//..
}
respond('Princess Caroline',response.Yes);
//不带初始化器的枚举 或者被放在第一的位置,或者被放在使用了数字敞亮或其他常量初始化了的枚举后面。
//如以下情况不被允许,报错
// enum E{
// A =getSomeValue(),
// B,
// }
//字符串枚举
//每个成员都必须用字符串字面量,或另外一个字符串成员进行初始化
enum Directionc{
Up = 'UP',
Down = 'DOWN',
Left = 'LEFT',
Right = 'RIGHT',
}
//数字枚举时,其值很难访问,字符串枚举时提供一个可读值,独立于枚举成员的名字。
//异构枚举
//它不带有初始化器且它之前的枚举成员是一个 数字常量。 这种情况下,当前枚举成员的值为它上一个枚举成员的值加1。
enum E2 {
A = 1, B, C
}
//字面量枚举成员的类型
//字面量枚举成员是指不带有初始值的常量枚举成员,或者是值被初始化为
//1、任何字符串字面量
//2、任何数字字面量
//3、应用了一元 - 符号的数字字面量
//当所有枚举成员都拥有字面量枚举值时,它就带有了一种特殊的语义。
// 首先,枚举成员成为了类型! 例如,我们可以说某些成员 只能是枚举成员的值:
// enum ShapeKind{
// Circle,
// Square,
// }
// interface Circle{
// kind:ShapeKind.Circle,
// radius:number,
// }
// interface Square{
// kind:ShapeKind.Square;
// sideLength:number;
// }
// let c:Circle = {
// kind :ShapeKind.Square,
// //报错,此值只属于CIRCLE
// radius:100,
// }
//
// //枚举类型编程每个枚举成员的联合
// enum E{
// Foo,
// Bar,
// }
// function f(x:E) {
// if(x!==E.Foo||x!==E.Bar){
// //报错。此处类型系统可以指导枚举里的值的集合
// //我们先检查 x是否不是 E.Foo。 如果通过了这个检查,然后 ||会发生短路效果, if语句体里的内容会被执行。 然而,这个检查没有通过,那么 x则 只能为 E.Foo,因此没理由再去检查它是否为 E.Bar。
// }
// }
// function f(obj:{X:number}) {
// return obj.X;
// }
// f(E2)//此处当E中有X 属性时可以运行。
//反向映射
//可以从枚举值到枚举名
enum Enum{
A
}
let a = Enum.A;
let nameOfA = Enum[a];//'A'
//不会为字符串枚举成员生成反向映射
//const 枚举
//常量枚举只能使用常量枚举表达式,并且不同于常规的枚举,他们在编译阶段会被删除。
//常量枚举成员在使用的地方会被内联进来。之所以可以这么做是因为,常量枚举不允许包含计算成员。
// const enum Directions{
// Up,
// Down,
// Left,
// Right
// }
// let directions = {
// Directions.Up,
// Directions.Down,
// }
//外部枚举
declare enum Enum2{
B,
C,
}
//外部枚举和非外部枚举之间有一个重要的区别,在正常的枚举里,没有初始化方法的成员被当成常数成员。 对于非常数的外部枚举而言,没有初始化方法时被当做需要经过计算的。
- 本文链接:https://archer-lan.github.io/2022/03/04/TypeScript%20%E5%AD%A6%E4%B9%A0%E2%80%94%E2%80%94%E6%9E%9A%E4%B8%BE/
- 版权声明:本博客所有文章除特别声明外,均默认采用 许可协议。