2016-12-01 1 views
3

angular2プロジェクトでカスタムインターフェイスとエイリアスを使用します。例えば、私は製品のリストを示しコンポーネントを実装していますので、私はProductインタフェースを定義する必要があります。インターフェイスと型エイリアスを配置する場所

export interface Product { 
    id: number; 
    name: string; 
    price: number; 
} 

は今、私はへのインターフェイスを置く場所が必要です。私はそれがコンポーネントフォルダ内にあるべきだと思っています。私もソースの中を覗き込んでおり、角度はすべてのインターフェイスをfacadeフォルダに入れているようです。

components 
| 
|--- product-list 
    | 
    |--- facade 
    | | 
    | |--- product.ts 
    | 
    |--- product-list.component.ts 
    |--- product-list.component.html 
    |--- product-list.component.css 

インタフェースは次のように使用されます:

export class RowComponent implements OnInit { 
    @Input() product: Product; 
    @Output() productRemoved: EventEmitter<ProductRemoved> = new EventEmitter(); 

    constructor() { 
    } 

これは実行可能なアプローチですだから私は、次のような構造になってしまいましたか?問題の案件に固有のスタイルガイドがありますか?

+0

このインターフェイスはどのくらい正確に使用されていますか?それはいくつかのクラスによって実装されていますか? – estus

+0

'製品とは?それが何らかのクラスのインスタンスであれば、 'interface'は冗長かもしれません。 'product-list'以外のコンポーネントで使用されている場合は、 'shared'に入れるのが妥当です。そうでない場合、 'product-list.component.ts'の中にあるかもしれません。 – estus

+0

@estus、yes、インターフェイスは、オブジェクトリテラルで作成されたオブジェクトを検証するために使用されます。しかし、3つのプロパティを持つシンプルなオブジェクトで、クラスを作成したくありません。 –

答えて

2

IMHOは、モデルクラスの上の同じファイルに配置するのが最も簡単で簡単なソリューションです。

interface ProductJson { 
    id: number; 
    name: string; 
    price: number; 
} 

export class Product{ 
    constructor(private id:number, 
       private name:String, 
       private price:number){} 


    public static fromJson(productJson : ProductJson) : Product { 
      // 
    } 
} 

EDIT:フォルダ構造について:

product-list 
| 
|--- component 
| | 
| |--- product-list.component.ts 
| |--- product-list.component.html 
| |--- product-list.component.css 
| 
|--- model 
| | 
| |--- product.ts 
| 
|--- service 
     | 
     |--- product-service.ts 

など。

これは私が何をすべきかです。

+0

ありがとう、しかしこの方法では、インターフェイスは再利用できません –

+0

本当です。しかし、フィールドID、名前、価格。製品以外のものをほとんど表現できません。わかりやすくするために、私は専用インタフェースを持っていますが、この場合はこのような構造になっています。より多くのジェネリックインターフェイスが追加ファイルを作成し、コア/モデルに配置するのはうまくいくようです。 –

+0

大丈夫、ありがとう、ありがとう。 'model'フォルダ名はおそらく' facade'よりも優れていますか? –