code

유니언 유형을 유형 스크립트에서 열거형으로 변환하는 방법은 무엇입니까?

starcafe 2023. 6. 7. 23:03
반응형

유니언 유형을 유형 스크립트에서 열거형으로 변환하는 방법은 무엇입니까?

유형 스크립트에서 열거나 좋아요를 위해 조합 유형을 은폐합니다.

제 머리로는 잘 안 돼요.

제 질문을 읽어주셔서 감사합니다.

type status = 'start' | 'loading' | 'stop';

class Loading {
    static staticStatus: status;
}
Loading.staticStatus.start; // i want to use.

또는

type status = 'start' | 'loading' | 'stop';

enum statusEnum = ?????;

class Loading {
    static staticStatus = statusEnum;
}
Loading.staticStatus.start; // i want to use.

질문을 자세히 쓰지 못해서 죄송합니다.

const schema ={
 status: Joi.string()
        .required()
        .valid(
            'start',
            'loading',
            'stop',
        )
}

// type setStatusType =  'start' | 'loading' | 'stop' is like this
type setStatusType = PickType<Joi.extractType<typeof schema>, 'status'>; 

enum statusEnum = ?????;

class Loading {
    static staticStatus = statusEnum;

    public setLoading() {
    this.status = Loading.staticStatus.loading // I want to use this.
    }
}

그래서 비밀 조합 유형을 열거하고 싶습니다...

어떻게 당신이 그것을 얻을지 확신할 수 없습니다.enum에서.Union하지만 둘 다 필요하면 쉽게 반대로 할 수 있습니다.

enum Status {
 start,
 loading,
 stop
}

type StatusAsUnion = keyof typeof Status

이것이 유용했기를 바랍니다.

가장 간단한 해결책은 다음을 사용하는 것입니다.string enum:

enum Status {
    start = 'start',
    loading = 'loading',
    stop = 'stop'
}


class Loading {
    static staticStatus: Status;
}

Loading.staticStatus = Status.loading;

문자열 열거형

열거형은 다음을 사용하여 정의됩니다.enum다음과 같은 키워드:

쓰기-읽기-코드-유형-스크립트-엔넘

enum Continents {
    North_America,
    South_America,
    Africa,
    Asia,
    Europe,
    Antartica,
    Australia
}

// usage
var region = Continents.Africa;

유형스크립트 »enums

TypeScript 열거형에는 세 가지 유형이 있습니다.

  1. 숫자 열거형
  2. 문자열 열거형
  3. 이질적인 열거형

숫자 열거 기본적으로 TypeScript 열거형은 숫자 기반입니다.즉, 문자열 값을 숫자로 저장할 수 있습니다.숫자 및 이와 호환되는 다른 유형을 열거형 인스턴스에 할당할 수 있습니다.주말에 날짜를 저장하고 싶다고 가정해 보겠습니다.TypeScript에 표시되는 열거형은 다음과 같습니다.

enum Weekend {
  Friday,
  Saturday,
  Sunday
}

위의 코드 블록에는 Weekend라고 하는 열거형이 있습니다.열거형에는 금요일, 토요일 및 일요일의 세 가지 값이 있습니다.TypeScript에서는 다른 언어와 마찬가지로 열거값이 0에서 시작하여 각 구성원에 대해 하나씩 증가합니다.다음과 같이 저장됩니다.

Friday = 0
Saturday = 1
Sunday = 2

열거형은 항상 스토리지에 대한 숫자로 할당되며, 값은 항상 0의 숫자 값을 사용하지만 고유한 논리로 스토리지 값을 사용자 지정할 수 있습니다.

사용자 지정 숫자 열거형 스크립트에서 열거형의 첫 번째 숫자 값을 지정할 수 있습니다.위의 주말 날짜 예제를 사용하여 다음과 같이 첫 번째 숫자 값을 초기화할 수 있습니다.

enum Weekend {
  Friday = 1,
  Saturday,
  Sunday
}

위의 코드 블록은 금요일을 1로, 토요일을 2로, 일요일을 3으로 저장합니다.첫 번째 멤버에 숫자를 추가해도 나머지 멤버에 대해 하나씩 순차적으로 증가합니다.그러나, 우리는 그들에게 수치를 부여함으로써 순차적인 추적을 원하지 않는다는 것을 지시할 수 있습니다.아래 코드 블록은 의미론적이며 TypeScript에서 작동합니다.

enum Weekend {
  Friday = 1,
  Saturday = 13,
  Sunday = 5
}

TypeScript의 다른 데이터 유형과 마찬가지로 다음과 같은 함수 매개 변수 또는 반환 유형으로 열거형을 사용할 수 있습니다.

프런트 엔드 애플리케이션 모니터링 수정 트랙 식별 무료 평가판 사용 >

enum Weekend {
  Friday = 1,
  Saturday,
  Sunday
}

function getDate(Day: string): Weekend {
    if ( Day === 'TGIF') {
        return Weekend.Friday;
    }
 }

let DayType: Weekend = getDate('TGIF');

위의 코드 블록에서 주말 열거형을 선언했습니다.그런 다음 Weekend 열거를 반환하는 입력 Day를 사용하는 getDate 함수를 선언했습니다.함수에서는 이제 열거 멤버를 반환하는 일부 조건을 확인합니다.

문자열 열거형 지금까지 멤버 값이 숫자인 열거형만 살펴보았습니다.TypeScript에서 열거형 멤버는 문자열 값일 수도 있습니다.문자열 열거형은 의미 있는 문자열 값으로 인해 오류 로깅 및 디버깅 중에 읽기 쉽도록 중요하며 처리하기 쉽습니다.

enum Weekend {
  Friday = 'FRIDAY',
  Saturday = 'SATURDAY',
  Sunday = 'SUNDAY'
}

그런 다음 다음 다음과 같은 조건문에서 문자열을 비교하는 데 사용할 수 있습니다.

enum Weekend {
  Friday = 'FRIDAY',
  Saturday = 'SATURDAY',
  Sunday ='SUNDAY'
}

const value = someString as Weekend;
if (value === Weekend.Friday || value === Weekend.Sunday){
    console.log('You choose a weekend');
    console.log(value); 
}

위의 예제에서는 위의 숫자 열거형과 마찬가지로 문자열 열거형인 Weekend를 정의했지만 이번에는 열거형 값을 문자열로 사용합니다.숫자 열거형과 문자열 열거형의 분명한 차이점은 숫자 열거형 값이 대부분 자동으로 순차적으로 증가하는 반면 문자열 열거형 값은 증가하지 않고 각 값이 독립적으로 초기화된다는 것입니다.

또한 이기종 열거형 스크립트를 사용하면 이기종 열거형 값이라고 하는 문자열과 숫자를 모두 혼합할 수 있습니다.

enum Weekend {
  Friday = 'FRIDAY',
  Saturday = 1,
  Sunday = 2
}

이것이 가능하지만, 이 사용 사례가 필요할 가능성이 있는 시나리오의 범위는 매우 작습니다.따라서 자바스크립트의 런타임 동작을 교묘한 방법으로 이용하려는 것이 아니라면 이질적인 열거형을 사용하지 않는 것이 좋습니다.

계산된 열거형 숫자 열거형의 값은 TypeScript의 다른 숫자 데이터 유형과 마찬가지로 상수이거나 평가될 수 있습니다.계산된 값으로 숫자 열거형을 정의하거나 초기화할 수 있습니다.

enum Weekend {
  Friday = 1,
  Saturday = getDate('TGIF'),
  Sunday = Saturday * 40
}

function getDate(day : string): number {
    if (day === 'TGIF') {
        return 3;
    }
}
Weekend.Saturday; // returns 3
Weekend.Sunday; // returns 120

규칙 #1 —

열거형에 계산된 멤버와 상수 멤버가 혼합된 경우 초기화되지 않은 열거형 멤버가 먼저 오거나 숫자 상수를 가진 다른 초기화된 멤버 뒤에 와야 합니다.

위의 규칙을 무시하면 이니셜라이저 오류가 발생합니다. 이 오류가 나타나면 열거형 구성원을 그에 따라 다시 정렬해야 합니다.

상수 숫자 열거형의 성능을 높이려면 상수로 선언할 수 있습니다.주말의 예를 사용하여 다음을 설명하겠습니다.

enum Weekend {
  Friday = 1,
  Saturday,
  Sunday
}

var day = Weekend.Saturday;

컴파일할 때JavaScript실행 시 런타임은 Weekend를 검색하고 Weekend를 검색합니다.토요일.런타임에 최적의 성능을 위해 다음과 같이 열거형을 대신 상수로 만들 수 있습니다.

const enum Weekend {
  Friday = 1,
  Saturday,
  Sunday
}
var day = Weekend.Saturday;

따라서 컴파일 시 생성되는 자바스크립트는 다음과 같습니다.

var day = 2;

컴파일러가 어떻게 열거형 사용을 인라인화하고 const를 볼 때 열거형 선언에 대한 JavaScript를 생성하지 않는지 확인합니다.검색 번호를 매기기 위해 문자열 또는 문자열에 번호를 매길 필요가 있는 사용 사례가 있는 경우 이 선택과 결과를 인식하는 것이 중요합니다.컴파일러 플래그를 전달할 수도 있습니다. ConstEnums를 유지하면 Weekend 정의가 계속 생성됩니다.

역매핑 TypeScript 열거형은 역매핑을 지원합니다. 즉, 우리가 열거형 멤버의 값에 액세스할 수 있는 것과 마찬가지로 열거형 이름 자체에도 액세스할 수 있습니다.첫 번째 데모의 샘플은 다음과 같이 설명하는 데 사용됩니다.

enum Weekend {
  Friday = 1,
  Saturday,
  Sunday
}
Weekend.Saturday     
Weekend["Saturday"];  
Weekend[2];

위의 코드 블록에서, Weekend.토요일은 2시에 돌아옵니다.Weekend["Saturday"]또한 2를 반환할 것이지만 흥미롭게도, 역방향 매핑 때문입니다.Weekend[2]토요일에 멤버 이름을 반환할 것입니다.이는 역방향 매핑 때문입니다.로그 명령을 사용하여 TypeScript가 역방향 매핑을 해석하는 간단한 방법을 확인할 수 있습니다.

enum Weekend {
  Friday = 1,
  Saturday,
  Sunday
}
console.log(Weekend);

이를 콘솔에서 실행하면 다음과 같은 출력이 표시됩니다.

{
  '1': 'Friday',
  '2': 'Saturday',
  '3': 'Sunday',
  Friday   : 1,
  Saturday : 2,
  Sunday  : 3
}

개체에는 TypeScript가 의도한 대로 값과 이름으로 나타나는 열거형이 포함됩니다.이것은 TypeScript에서 역방향 매핑의 효과를 보여줍니다.

TypeScript 열거형을 사용할 때 열거형을 사용하는 것이 최적이고 매우 효율적인 장소와 적절한 사용 사례가 있습니다.

열거형은 다른 TypeScript 데이터 유형과 마찬가지로 어레이 초기화 내부에서 사용할 수 있습니다.

다음은 간단한 예입니다.

enum NigerianLanguage {
  Igbo,
  Hause, 
  Yoruba
}

//can be used in array initialisation 
let citizen = {
  Name: 'Ugwunna',
  Age: 75,
  Language: NigerianLanguage.Igbo
}

열거형은 다음과 같이 상수로 볼 수 있는 고유한 값이 있는 상황에서 이상적으로 사용해야 합니다.

enum Days {
  Sunday = 1,
  Monday,
  Tuesday,
  Wednesday,
  Thursday,
  Friday,
  Saturday
}

열거형은 문자열 또는 상수를 변수로 표시해야 하는 위치에도 사용할 수 있습니다.

나의 경우, 나는 다음을 사용합니다.

import { IExternal } from 'external';

enum Types = {
   FIRST = 'first',
   SECOND = 'second'
}

interface IInternal extends Pick<IExternal, 'types'> {
    types: Types
}

I external['types'] === 'first' | 'second' | 'something' | 'something';

II 내부['types'] === 'first' | 'second'; 그리고 I 외부['types']와 호환 가능

union의 유형을 열거형 값으로 사용하고 호환성 검사를 제공할 수 있습니다.

언급URL : https://stackoverflow.com/questions/56944441/how-to-convert-union-type-to-enum-in-typescript

반응형