2017-10-11 4 views
6

私は、使用しているJavaScriptで書かれた外部SDKを持っています。これらのモジュールの1つであるBlobは新機能ですが、列挙型FooEnum(メンバーBarおよびBaz)も公開されています。TypeScriptのnewableおよびenumの参照

JavaScriptでこの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を得ることができません。

Blob.FooEnumが実際に列挙型自体を指し、列挙型のメンバーではないことをどのようにタイプスクリプトに伝えることができますか?

答えて

3

Fooは、値の名前と型名の両方です。値としては、その特性キーBarBazを有し、その値01であり、それぞれ(それはまた、値それぞれ"Bar""Baz"、あるキー01と特性を有する。)オブジェクトを表しています。タイプとしては、タイプがFoo.BarFoo.Bazの和集合を表します。これらは同じではありません。Fooの値はFooではありません。

これはクラスのようなものであり(class Bar {})、値Barはクラスコンストラクタを表し、タイプBarはクラスのインスタンスのタイプを表します。ここでも値BarはタイプBarではありません。どちらの場合も

、あなたはタイプが名前FooまたはBarと値に対応したい場合は、値をtypeofを使用します。

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

FooEnumは、オブジェクトFooと同じ型を持っており、それはあなたのために働くはずです。

幸運を祈る!

関連する問題