2017-12-06 45 views
0

私はModelとそのサブクラスClientModelの2つのモデルがあります。今度はClientというインターフェースからClientModelという属性のセットを宣言したいと思います。どうしたらいいですか?私はこのような何かを想像することができます:Typescript宣言:クラスとインターフェイスをマージする

interface Client { 
    name: string; 
    email: string; 
} 

declare class ClientModel extends Model implements Client { 
    // with name and email here without redeclare them 
} 

答えて

2

宣言のマージを使用することができます。クラスとインタフェースが同じ名前空間/モジュールで宣言され、同じ名前を持つ場合、それらは単一のクラス型にマージされます。

interface ClientModel { 
    name: string; 
    email: string; 
} 

class ClientModel extends Model { 
    m() { 
     this.email //Valid 
    } 
} 

あなたがインターフェイスを変更することはできませんか、別の名前空間で宣言され、あなたがマージされたインターフェイスで、それを継承することができ、それを移動することはできません場合は、次の

interface Client { 
    name: string; 
    email: string; 
} 

interface ClientModel extends Client {} 
class ClientModel extends Model { 
    m() { 
     this.email //Valid 
    } 
} 
+1

パーフェクト!ありがとう@Titian –

+0

こんにちは@ティティアン、私は新しい質問をする必要がある場合は教えてください。ベースモデルに静的プロパティを追加する方法はありますか?私は宣言をマージしようとするとTS2300を取得しました... –

+0

いつエラーが表示されますか?静的なプロパティを追加しようとしていますか?マージはいくつかのケースでのみ機能しますが、interface + classは1で、class + classは動作せず、インターフェイスにはスタティックがありません –

関連する問題