2017-01-05 4 views
0

私は(有効活字体である)このようなインターフェイス私はクラスで実装しようとしています名前のないインターフェイスメンバーを実装する方法は?

interface IPerson { 
    (name: string, age: number): IPerson, 
    getSomething(): string 
} 

ている:どのように私は(name: string, age: number): IPersonメンバーを

class Person implements IPerson { 
    constructor(private something: string) { 

    } 

    getSomething(): string { 
     return this.something; 
    } 
} 

を実装していますか?

+0

静的な名前付きメソッドではありませんか?少なくとも、それはあなたの問題を解決するだろう。 – Mijago

+0

ここに問題はありません。ちょうど興味深いところは、これらのようなインタフェース宣言を持つタイプスクリプト定義ファイルを見ることです。 :) – Saravana

答えて

1

インターフェースもgetSomethingと呼ばれる追加の方法があり、特定のシグネチャを持つ関数を記述しています。
Hybrid Typesと記載されているドキュメントにあります。

私はそれを実装するクラスを作成する方法がありますとは思わない、あなたは基本的には、このインタフェースを実装のインスタンスを作成するファクトリ関数持っている必要があります:

function createPerson(name: string, age: number): IPerson { 
    let person = function(newName: string, newAge: number) { 
     return createPerson(newName, newAge); 
    } as IPerson; 
    person.getSomething = function() { 
     return `${ name }: ${ age }`; 
    } 

    return person; 
} 

code in playgroundを)

しかし、それは変な定義です。

1

これは機能タイプです。それはクラスが直接これを実装している可能性があります場合は...

interface SearchFunc { 
 
    (source: string, subString: string): boolean; 
 
} 
 

 
let mySearch: SearchFunc; 
 
mySearch = function(source: string, subString: string) { 
 
    let result = source.search(subString); 
 
    return result > -1; 
 
}

をこの方法を実装する必要があります私は知りません。

チェックtypescriptです手帳機能の種類http://www.typescriptlang.org/docs/handbook/interfaces.html

1

フム、おそらくこの方法は?

var person = ((): IPerson => { 
    var x: any = function (name: string, age: number): IPerson { 
         return this; 
       } 
    x.getName = function() { 
         return "NAME"; 
       } 
    return x; 
    } 
); 

.... JS ....あなたが投稿

var person = (function() { 
    var x = function (name, age) { 
     return this; 
    }; 
    x.getName = function() { 
     return "NAME"; 
    }; 
    return x; 
});