2017-12-07 12 views
0

以下は、このコードを拡張しtypescriptを使用してインターフェイスにextendsを使用するにはどうすればよいですか?

interface customerInfo { 
    Success: boolean; 
    Code: string; 
    Message: string; 
    Result: { 
     name: string 
     tel: number 
    } 
} 

interface accountInfo { 
    Success: boolean; 
    Code: string; 
    Message: string; 
    Result: { 
     xxx: number 
     vvv: string 
    } 
} 

がどのように使用することができます私の原点コードですか?

interface outer { 
    Success: boolean; 
    Code: string; 
    Message: string; 
    Result: Object; 
} 

interface customerInfo extends outer.Result { 
     name: string 
     tel: number 
} 

interface accountInfo extends outer.Result { 
     xxx: number 
     vvv: string 
} 

上記のコードは正しいですか? インターフェイスcustomerInfoおよびaccountInfoの内容はresultオブジェクトの下にあります。

あなたが作ることができる
+0

達成しようとしていることは何ですか? –

答えて

0

outerジェネリックやタイプパラメータは、結果の型になります:typeパラメータは、インラインインターフェイスの宣言である上記のタイプでは

interface outer<T> { 
    Success: boolean; 
    Code: string; 
    Message: string; 
    Result: T; 
} 

interface customerInfo extends outer<{ 
    name: string 
    tel: number 
}> { 
    //Other members 
} 

interface accountInfo extends outer<{ 
    xxx: number 
    vvv: string 
}>{ 
    //Other members 
} 

が、あなたはそれを再利用する場合、それはあるかもしれません名前付きインターフェイスを使用するのが最適です。例:

interface customerInfo extends outer { 
    Result: { 
     name: string 
     tel: number 
     } 
} 

あなたはcustomerInfoResultに別のオブジェクトを代入しようとすると文句を言うだろう:

interface customerInfoResult { 
    name: string 
    tel: number 
} 
interface customerInfo extends outer<customerInfoResult> { 
    //Other members 
} 
0

最も簡単な方法は、単に新しいResultタイプでouterを拡張することです。

しかし、本当にこれをやりたいですか?あなたの回答のすべてが成功したか失敗したかにかかわらず、Code,MessageResultがありますか?その後、トップアップcustomerInfoaccountInfoを定義することがずっと簡単

と自体は成功と失敗例を区別するように変更されouterインタフェース内にそれらが含まれています。今、あなたはそれを使用する場合

interface customerInfo { 
    name: string 
    tel: number 
} 

interface outerSuccess { 
    Success: true; 
    Result: customerInfo | accountInfo; 
} 
interface outerFail { 
    Success: false; 
    Code: string; 
    Message: string; 
} 
type outer = outerSuccess | outerFail; 

if (response.Success) { ... can access Result here ... } 
else { ... can access Code and Message here ... } 

PS tel: number?おそらく文字列でなければなりません。

関連する問題