정의 파일에서 주변 열거형을 올바르게 사용하는 방법
6056 단어 typescriptenum
enum
를 선언해야 하는 경우 이상한 동작이 발생하여 다음과 같은 결과가 발생할 수 있습니다./// module A
/// types.d.ts
export enum MyEnumA {
A = "A"
}
/// module B
/// main.ts
import { MyEnumA } from 'A'
console.log(MyEnumA.A)
// TypeError: cannot read property 'A' of undefined
왜요?
간단히 말해서 정의 파일은 값으로 참조할 수 없으므로 'Ambient'라고 합니다.
제대로 해결하는 방법은?
const enum 솔루션(권장하지 않음)
프로젝트에 매우 간단한 설정이 있는 경우. TypeScript 기능 호출
const enum
을 사용할 수 있습니다.
const
as a prefix ofenum
will turn thisenum
into an inline constant in compiler time.
/// module A
/// types.d.ts
export const enum MyEnumA {
A = "A"
}
/// module B
/// main.ts
import { MyEnumA } from 'A'
console.log(MyEnumA.A)
/// module B compiled
/// main.js
console.log("A") // <<< here is the hardcoded value from enum
하지만 이 방법이 권장되지 않는 이유는 무엇입니까?
isolatedModule
옵션MyEnumA.A
로 하드코딩된 값으로 변환됩니다. module B
enum 값이 변경되면 다시 컴파일module A
하여 하드코딩된 값전역 범위에서 주변 값 선언(권장)
적절한 솔루션은 이 열거형 값을 주변에 할당하는 것입니다. Ambient는 추상화일 뿐이므로 Ambient에서도 선언할 때 구현 파일에서 이 값을 할당해야 합니다.
따라서 정의 파일에서
enum
를 주변으로 선언하고 전역 범위 변수에 값을 할당합니다./// module A
/// types.d.ts
declare enum MyEnumAValue { // ambient enum
A = "A"
}
declare var MyEnumA: typeof MyEnumAValue // ambient value
/// module B
/// types.ts as ambient value file
enum MyEnumAValue {
A = 'A'
}
window.MyEnumA = MyEnumAValue; /// this will be checking with ambient if enum value is consistent with ambient enum
// or
global.MyEnumA = MyEnumAValue;
/// main.ts
import 'A'
console.log(MyEnumA.A)
유형 검사 작업 방법은 다음과 같습니다.
일관된
일관성 없는
요약
유형 정의 파일을 사용하고 그 안에 enum을 선언하려는 경우.
구현 파일에서 환경에서도 선언한 대로 값을 할당해야 합니다.
가장 좋은 방법은 열거형 값을 전역 범위 변수에 할당하는 것입니다.
Reference
이 문제에 관하여(정의 파일에서 주변 열거형을 올바르게 사용하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/zapkub/how-to-proper-use-ambient-enum-from-definition-file-5ddg텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)