열거형은 관련 값 모음을 구성하는 방법입니다. 매우 많은 프로그래밍 언어들은 (C/C#/Java) enum을 데이터 타입에 포함하고 있지만 자바스크립트는 포함하고 있지 않습니다. 그러나 타입스크립트는 그렇지 않습니다. 타입스크립트 열거형을 선언하는 방법을 아래의 예제를 통해서 확인할 수 있습니다.
enum CardSuit {
Clubs,
Diamonds,
Hearts,
Spades,
}
// Sample usage
var card = CardSuit.Clubs
// Safety
card = 'not a member of card suit' // Error : `CardSuit`이 열거형이기 때문에 문자열을 할당할 수 없습니다.
이 열거형 값은 number이므로 이후부터는 숫자 열거형이라고 합니다.
숫자 열거형 그리고 숫자들
타입스크립트 열거형은 숫자가 기본입니다. 이것은 숫자가 열거형 인스턴스에 할당 될 수 있고 number와 호환되는 다른것도 가능하다는 것을 의미합니다.
enum Color {
Red,
Green,
Blue,
}
var col = Color.Red
col = 0 // Effectively same as Color.Red
숫자 열거형 그리고 문자들
열거형을 자세히 살펴보기 전에 생성되는 자바스크립트를 살펴보겠습니다. 여기에 타입스크립트 예제가 있습니다.
Tristate[Tristate["False"] = 0] = "False"; 이 줄에 초점을 맞춰서 설명하면 이 안에 Tristate["False"] = 0으로 할당한다. 자바스크립트에서 할당연산자는 이 경우에 0을 반환합니다. Tristate[0] = "False" 여기서 0에 해당하는 값이 방금 할당한 값이 0이기 때문에 Tristate[0] = "False" 값은 False를 반환합니다. 아래에 설명되어 있습니다.
의미 있고 디버깅 가능한 문자열 값을 제공하므로 처리 및 디버깅이 더 쉬울 수 있습니다. 이 값을 사용하여 간단한 문자열 비교를 수행 할 수 있습니다. 예시.
// Where `someStringFromBackend` will be '' | 'passport_visa' | 'passport' ... etc.
const value = someStringFromBackend as EvidenceTypeEnum
// Sample code
if (value === EvidenceTypeEnum.PASSPORT) {
console.log('You provided a passport')
console.log(value) // `passport`
}
var lie = Tristate.False 줄은 var lie = Tristate.False로 컴파일 됩니다. (네. 출력과 입력은 동일합니다.) 즉 런타임시 런타임은 Tristate를 찾은 다음 Tristate.False를 찾아야 합니다. 여기서 성능 향상을 얻으려면 enum을 const enum으로 작성하면 됩니다. 아래에 코드를 참고하십시요.
인라인화 되기 때문에 enum 정의에 대한 JavaScript를 생성하지 않습니다 (런타임에는Tristate 변수가 없습니다).
Const enum preserveConstEnums
인라인은 확실한 성능 이점이 있습니다. 런타임에 Tristate 변수가 없다는 사실은 실제로 런타임에 실제로 사용되지 않는 JavaScript를 생성하지 않음으로써 컴파일러를 도와주고 있습니다. 그러나 컴파일러가 여전히 number to string 또는 string to number 조회와 같은 항목에 대한 JavaScript 버전의 열거 정의를 생성하도록 할 수 있습니다. 이 경우 컴파일러 플래그--preserveConstEnums를 사용할 수 있으며 여전히var Tristate 정의를 생성하므로 런타임에 수동으로 Tristate [ "False"] 또는 Tristate [0]을 사용할 수 있습니다. 이것은 inlining에 영향을 미치지 않습니다.
정적 함수가 있는 Enum
enum +namespace 병합 선언을 사용하여 정적 메서드를 enum에 추가 할 수 있습니다. 다음은 정적 멤버isBusinessDay를 enum Weekday에 추가하는 예시를 보여줍니다.
우리는 이미Tristate [Tristate [ "False"] = 0] = "False";부분을 설명했습니다. 이제 주변 코드(function (Tristate) {/ * code here * /}) (Tristate || (Tristate = {}));를 구체적으로(Tristate || (Tristate = {}));이 부분 . 이것은 기본적으로 이미 정의 된 Tristate 값을 가리 키거나 새로운 {}객체로 초기화하는 로컬 변수TriState를 캡쳐합니다.
즉, 여러 파일에서 열거 정의를 분할 (및 확장) 할 수 있습니다. 예를 들어 아래에서 우리는Color에 대한 정의를 두 개의 블록으로 나누었습니다.
enum Color {
Red,
Green,
Blue,
}
enum Color {
DarkRed = 3,
DarkGreen,
DarkBlue,
}
열거의 연속에서 첫 번째 멤버 (여기서는 DarkRed = 3)를 should로 초기화하여 생성 된 코드가 이전 정의 (예 :0,1, ... 등)에서 클로버가 아닌 값을 얻도록 합니다. 값). 어쨌든 TypeScript는 경고하지 않습니다. (오류 선언 여러 선언이있는 열거 형에서는 하나의 선언 만 첫 번째 열거 형 요소의 초기화 프로그램을 생략 할 수 있습니다 .)