2017-05-27 24 views
3

TypeScriptのインターフェイス宣言の内部に条件を設定することは可能ですか?私が探しているのは、最初のキーの値に基づいて、2番目のキーがこれらの値になると言う方法です。Javascript条件付き内部型スクリプトインターフェイス

例(非機能):

interface getSublistValue { 

    /** The internal ID of the sublist. */ 
    sublistId: 'item' | 'partners'; 

    /** The internal ID of a sublist field. */ 
    if (this.sublistId === 'item') { 
     fieldId: 'itemname' | 'quantity'; 
    } 

    if (this.sublistId === 'partners') { 
     fieldId: 'partnername' | 'location'; 
    } 
} 

答えて

5

ありませんがないのです。最も良いことは、2つの異なるタイプのデータを記述する別々のインタフェースを作成することです。だから私は、私は、私はまだオートコンプリートとfieldId` `のためのすべての4つのオプションを取得し` someValue`オブジェクトを作成していますが、少なくともそれは私に警告を与え、この方法を使用する場合

interface SublistItem { 
    sublistId: 'item'; 
    fieldId: 'itemname' | 'quantity'; 
} 

interface SublistPartners { 
    sublistId: 'partners'; 
    fieldId: 'partnername' | 'location'; 
} 

function getData(): SublistItem | SublistPartners { 
    return (Math.random() < 0.5) 
     ? { sublistId: 'item', fieldId: 'itemname' } 
     : { sublistId: 'partners', fieldId: 'partnername' }; 
} 

const someValue = getData(); 

if (someValue.sublistId === "item") { 
    // SublistItem in here 
} 
else { 
    // SublistPartners in here 
} 
+0

:たとえば

sublistIdとfieldIdが一致しない場合(つまり、 'item'と 'partnername')私が得ることは、私の 'someValue'が' const someValue:SublistItem | {if(someValue.sublistId === 'item'){} '条件に' location'があるという警告が表示されます。 'itemname'や' quantity'ではなく、私はすでにそれを知っています、なぜ私はその警告を受けるでしょうか? –

+0

@JonLamb hmmm ...そのために表示されるエラーメッセージは役に立ちません。その場合、 'sublistId'は' partners 'だけであることを知っているので、 'item'をチェックするとエラーになります。 '' item''を '' partners''に置き換えると、それはうまくいきます。あなたがどこかから価値を受けていて、データが何であるか分からないシナリオを試してみてください。私は例を更新しました。 –

関連する問題