2017-10-11 6 views
6

JavaScript를 사용하여 외부 SDK를 작성했습니다. 이러한 모듈 중 하나 인 Blob은 새로운 기능을 제공하지만 열거 형 FooEnum (구성원 BarBaz)을 노출합니다.TypeScript newable 및 enum 참조

자바 스크립트에서이 SDK를 사용하는 코드는 그래서 같다 : 내가 지금은 나에게 어떤 종류의 안전을 제공하기 위해이 SDK를 캐스팅 할 수있는 인터페이스를 작성하는 것을 시도하고있다

const blobInstance = new Sdk.Blob(); 
const fooType = Sdk.Blob.FooEnum.Baz; 

.

interface BlobInterface { } 

enum Foo { 
    Bar, 
    Baz 
} 

interface Sdk { 
    Blob: { 
     new(): BlobInterface; 
     FooEnum: Foo; 
    } 
} 

이 문제 그러나, 나는 Blob.FooEnum를 참조 할 때, 그것은 FooEnum 자체가 실제로 열거 Foo의 일원이라고 생각한다는 것입니다 (즉, 그것이 Bar하다고 생각 내 : 여기에 지금까지있어 무엇인가 또는 Baz) 따라서, Baz을받을 수 없습니다.

TypeScript에 Blob.FooEnum이 실제로 열거 형을 가리키며 열거 형의 구성원이 아니라고 어떻게 알릴 수 있습니까?

답변

3

Foo은 모두 값 이름과 유형 이름입니다. 값으로는 그 특성이 키 BarBaz하고 그 값을 각각 01를 인 객체 나타낸다 (또한 값 각각 "Bar""Baz"을 가지는 키 01와 속성을 가진다.). 유형으로는 Foo.BarFoo.Baz 유형의 합집합을 나타냅니다. 이러한 값은 동일하지 않습니다. 값 FooFoo이 아닙니다.

클래스 (예 : class Bar {})와 같으며, 값 Bar은 클래스 생성자를 나타내며 유형 Bar은 클래스 인스턴스의 유형을 나타냅니다. 다시 Bar 값은 Bar이 아닙니다.

interface Sdk { 
    Blob: { 
     FooEnum: typeof Foo; 
    } 
} 

지금 FooEnum 객체 Foo와 같은 형태를 가지고 있으며, : 당신은 유형이 이름 Foo 또는 Bar와 값에 대응하려면 두 경우 모두

, 당신은 값으로 typeof를 사용 그것은 당신을 위해 일해야합니다.

행운을 빈다.