programing

스크립트 열거형에 문자열 값을 할당할 수 없습니다(Initializer 유형 문자열을 변수 유형에 할당할 수 없음).

lastcode 2023. 7. 6. 22:16
반응형

스크립트 열거형에 문자열 값을 할당할 수 없습니다(Initializer 유형 문자열을 변수 유형에 할당할 수 없음).

TypeScript 2.4 이후부터는 String Enums가 기능인 것 같습니다.

그러나 다음은 작동하지 않습니다.

enum Foo {
    A = "A",
    B = "B"
}

var foo : Foo = "A";

변수 유형 Foo에 이니셜라이저 유형 문자열을 할당할 수 없습니다.

문자열 리터럴 작업:

type Foo = "A" | "B";

하지만 만약 가 사용하고 싶다면?enum이 일을 피할 방법이 있습니까?

인덱스 식을 사용하여 열거값을 가져올 수 있습니다.

enum Foo {
    A = "A",
    B = "BB"
}

var foo : Foo = Foo["A"];
var fooB : Foo = Foo["B"];

키는 값이 아닌 구성원의 이름이 됩니다.

형식 어설션을 사용할 수도 있지만 잘못된 값을 할당해도 오류가 발생하지 않습니다.

var foo : Foo = "A"  as Foo;
var foo : Foo = "D"  as Foo; // No error

~하듯이Foo사용할 수 있는 열거형입니다..의 가치에 접근할 수 있을 뿐만 아니라enum아래와 같이

var foo : Foo = Foo.A;

질문 자체에 대한 직접적인 대답은 아니지만(이는 열거형이 아니라 파생형에 할당되기 때문에), 저는 이것이 제가 할당할 수 있도록 허용하는 문제를 해결하는 것이라는 것을 발견했습니다.string그리고 그것이 열거형의 일부라는 것을 보장하고, 심지어 내가 중복되는 것을 피할 수 있게 해줍니다.A = "A"정말 중요한 것은A.

사용할 수 있습니다.keyof 있는 속성을 열거합니다.typeof열거형(Foo)

enum Foo {
    A,
    B
}

var foo : keyof typeof Foo = "A"; // OK
var foo : keyof typeof Foo = "C"; // ERROR

또는 객체:

interface Bar {
    type: keyof typeof Foo
}

let obj: Bar = {
    type: "A" // OK
}

[*] 다른 답변 중 하나를 승인된 것으로 표시하고 참조용으로 여기에 보관합니다.

유형 스크립트 열거형 문서에 설명된 대로

다양한 방법으로 사용할 수 있습니다.

Enum.A // Good way

Enum["A"] // Bad way

Enum[variable] // Good way

당신의 경우에는

enum Foo {
    A = "A",
    B = "B"
}

// Bad way
const example1 : Foo = Foo["A"];

// Good way
const example2 : Foo = Foo.A;

// Good way
const example3 : Foo = Foo[variable];

의 사용을 피해야 합니다.example1에 초점을 맞춥니다.example2그리고.example3어떤 경우에도, 쓸 의미가 없습니다."A".

항상 선호Enum.A변수를 열거형으로 캐스팅하려면Enum[variable].

언급URL : https://stackoverflow.com/questions/50464141/cannot-assign-a-string-value-to-typescript-enum-initializer-type-string-not-ass

반응형