2016-06-25 27 views
2

TypescriptハンドブックのClass Typesセクションを読んでいて、クラスのインターフェイス定義の記述方法が混乱しています。ドキュメントから、クラスの "インスタンス"側を記述するためにインタフェースを使用できることを理解しています。しかし、クラスの静的な側面を記述するインタフェースをどのように記述しますか?ここでクラスのTypescriptインターフェイスの作成

は例です:コンストラクタ関数も同様に説明することができるように、この例では

interface IPerson { 
    name: string; 
    getName(): string; 
} 

class Person implements IPerson { 
    public name: string; 

    constructor(name: string) { 
     this.name = name; 
    } 

    public getName() { 
     return this.name; 
    } 
} 

、どのようIPersonを変更するのでしょうか?

答えて

5

あなたは、静的なニーズのために別のインタフェースを作成することができます。

interface IPerson { 
    name: string; 
    getName(): string; 
} 

class Person implements IPerson { 
    public name: string; 

    constructor(name: string) { 
     this.name = name; 
    } 

    public getName() { 
     return this.name; 
    } 

    public static create(name: string) { // method added for demonstration purposes 
     return new Person(name); 
    } 
} 

静的インタフェース:

let p2: typeof Person = Person; // same as 'let p2 = Person;' 
let p3: typeof Person = AnotherPerson; 
+0

「let p:IPersonStatic = Person」とは何かを説明できますか?この設定は 'Person'クラスを参照する' p'変数ですか? – wmock

+2

@wmock 'Person'クラスの宣言は、' Person' - 1)型と呼ばれる2つのものと、2) 'Person'を構築する関数を参照する変数を作成します(' new'接頭辞、すなわちコンストラクタ)。あなたのコードでは、型や値のどちらか一方について常に明確に話しているが、両方ではないので、混乱することは問題ありません。変数 'Person'は' Person'型の 'const'のようなもので、構造的に互換性のある型の変数に代入することができます。 –

0

:また

interface IPersonStatic { 
    new(name: string); // constructor 
    create(name: string): IPerson; // static method 
} 

let p: IPersonStatic = Person; 

、あなたはタイプを決定するためにtypeofを使用することができますあなたの例にIPersonConstructorを追加しました。残りは同じです。分かりやすくするために含まれています。

new (arg1: typeOfArg1, ...): TypeOfInstance;は、newで呼び出すことができ、クラスのインスタンスを返すため、クラスを記述します。

interface IPerson { 
    name: string; 
    getName(): string; 
} 

class Person implements IPerson { 
    public name: string; 

    constructor(name: string) { 
     this.name = name; 
    } 

    public getName() { 
     return this.name; 
    } 
} 

interface IPersonConstructor { 
    // When invoked with `new` and passed a string, returns an instance of `Person` 
    new (name: string): Person; 
    prototype: Person; 
} 
関連する問題