TypeScript 열거형 유형

참고: Brother Man의 노트

Javascript에는 열거형 개념이 없지만 Typescript에서는 열거형이 보완됩니다 . 이 유형은 강력하게 결합된 매직 스트링
의 코드를 효과적으로 해결할 수 있습니다 . 매직 스트링이 코드의 여러 위치에서 사용되는 경우 열거 유형을 사용하여 코드의 결합을 줄이는 것을 고려할 수 있습니다. 보충: 매직 문자열은 직접 할당을 위해 여러 위치에서 동일한 리터럴 문자열을 사용하는 동작으로 이해될 수 있습니다.

숫자 열거

// 定义一个数字枚举
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
}

문자열 열거형

문자열 열거형에서 각 멤버는 문자열 리터럴이나 다른 문자열 열거형 멤버의 값을 사용하여 할당되고 초기화되어야 합니다.

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

문자열 열거형에는 자동 증가 동작이 없으므로 문자열 열거형은 잘 직렬화될 수 있습니다 . 즉, 열거형 멤버의 이름과 관계없이 런타임 시 의미 있고 읽을 수 있습니다 .

숫자 문자열과 달리 첫 번째 열거형 값을 할당하면 후속 열거형 멤버의 값에 영향을 미칩니다.

이종 열거형

이종 열거형은 문자열 유형과 숫자 유형을 혼합한 열거형입니다.

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

인터페이스 열거

열거형 멤버가 인터페이스의 속성으로 사용되는 경우, 인터페이스를 사용하여 변수에 값을 할당할 때 인터페이스 정의에 사용되는 열거형 멤버 속성만 사용할 수 있습니다.

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

const 열거형

const 열거형은 상수 열거형입니다. 일반 열거형과 달리 상수 열거형은 컴파일 단계에서 삭제됩니다. 상수 열거형의 멤버 값이 어딘가에서 사용되지 않는 한, 사용된 멤버 값이 사용됩니다. 로컬 인라인 들어 온다.

컴파일 단계에서 제거되는 이유는 상수 열거형에 계산된 멤버가 포함될 수 없기 때문입니다.

상수 열거형은 요구 사항이 엄격한 특정 상황에서 주로 사용되며, 추가로 생성되는 코드의 오버헤드와 열거형 멤버에 대한 추가 간접 액세스를 피하기 위해 상수 열거형(const enumerations) 사용을 고려할 수 있습니다.

참고: 상수 열거는 let 및 var 를 사용하여 정의할 수 없습니다 .

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

매핑

열거형 멤버의 사용은 순방향 매핑(이름 -> 값)과 역방향 매핑(값 -> 이름)으로 구분됩니다.

참고: 문자열 열거 멤버에 대한 역방향 매핑은 없습니다 .

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

Guess you like

Origin blog.csdn.net/qq_44886882/article/details/127630502