Tipos de enumeración de TypeScript

Referencia: notas del hermano Man

No existe el concepto de enumeración en Javascript, pero el tipo de enumeración se complementa en Typecript .
Este tipo puede resolver eficazmente el código de cadenas mágicas fuertemente acopladas . Si se utilizan cadenas mágicas en muchos lugares del código, puede considerar utilizar tipos de enumeración para reducir el acoplamiento del código. Suplemento: la cadena mágica puede entenderse como el comportamiento de utilizar la misma cadena literal en varios lugares para la asignación directa.

Enumeración de números

// 定义一个数字枚举
enum Types {
    
    
  Red,
  Green,
  Blue
}
// 如果不给值,就是默认从0开始,等同于如下
enum Types {
    
    
  Red = 0,
  Green = 1,
  Blue = 2
}
// 增长枚举 第一个枚举值赋值为1, 之后的枚举值就会从1开始递增
// 也就是 Green = 2,Blue = 3。 
enum Types {
    
    
  Red = 1,
  Green,
  Blue
}

enumeración de cadenas

En una enumeración de cadena, cada miembro debe asignarse e inicializarse utilizando un literal de cadena o el valor de otro miembro de enumeración de cadena.

// 定义一个字符串初始值
enum Types {
    
    
  Red = 'Red',
  Green = 'Green',
  Blue = 'Blue'
}

Dado que las enumeraciones de cadenas no tienen un comportamiento de incremento automático, las enumeraciones de cadenas se pueden serializar bien , es decir, son significativas y legibles en tiempo de ejecución, independientemente de los nombres de los miembros de la enumeración .

A diferencia de las cadenas numéricas, la asignación del primer valor de enumeración afectará los valores de los miembros de enumeración posteriores.

Enumeraciones heterogéneas

Las enumeraciones heterogéneas son enumeraciones que combinan tipos de cadenas y tipos numéricos.

enum Types {
    
    
  value1 = "hello world",
  value2 = 0
}

Enumeración de interfaz

Cuando un miembro de enumeración se usa como atributo de una interfaz, solo el atributo del miembro de enumeración usado para la definición de la interfaz se puede usar al asignar valores a las variables usando la interfaz.

// 定义一个数字枚举
enum Types {
    
    
  value1,
  value2
}
// 定义一个接口使用枚举
interface IA {
    
    
	a: Types.value1,
  b: Types.value2
}
// 使用接口定义变量, 必须符合接口规范
let obj: IA {
    
    
  a: Types.value1,
  b: Types.value2
}

enumeración constante

Las enumeraciones constantes son enumeraciones constantes. A diferencia de las enumeraciones ordinarias, las enumeraciones constantes se eliminarán durante la fase de compilación. A menos que los valores de los miembros en la enumeración constante se usen en algún lugar, se usarán los valores de los miembros usados. Inlining local viene en.

La razón por la que se elimina durante la fase de compilación es que no se permite que las enumeraciones constantes contengan miembros calculados.

Las enumeraciones constantes se utilizan principalmente en determinadas situaciones con requisitos estrictos. Para evitar la sobrecarga del código generado adicional y el acceso indirecto adicional a los miembros de la enumeración, puede considerar el uso de enumeraciones constantes (enumeración constante).

Nota: Las enumeraciones constantes no se pueden definir usando let y var .

// 定义一个常量枚举
const enum Person {
    
    
  per1,
  per2,
  per3
}
// 定义一个使用常量枚举的变量,其中 Person.per3 没有被使用就会在编译阶删除
let person = [Person.per1, Person.per2] // 生成的person变量就是 [0, 1]

cartografía

El uso de miembros de enumeración se divide en mapeo directo (nombre -> valor) y mapeo inverso (valor -> nombre)

Nota: No existe una asignación inversa para los miembros de enumeración de cadenas .

// 定义一个枚举
enum Enum {
    
    
  value
}
// 正向映射 也就是使用点引用,返回枚举成员属性值
let a = Enum.value
cosnole.log(a) // 0
// 反向映射 也就是使用中阔号引用, 返回枚举成员属性名
let b = Enum[value]
cosnole.log(a) // value

Supongo que te gusta

Origin blog.csdn.net/qq_44886882/article/details/127630502
Recomendado
Clasificación