2016-11-25 10 views
1

対インタフェースは、私は、次の機能を持っている:検証関数のシグネチャ - タイプの別名

function (n: number) { 
    return {s: n}; 
} 

は私が署名のためのバリデータを作成する必要があります。私が何を読んでから私は2つのオプションがあります。

インタフェースを

interface ValidatorFnInterface { 
    (n: number): { 
     [key: string]: any; 
    }; 
} 

タイプの別名

type ValidatorFnType = (n: number) => { 
    [key: string]: any 
}; 

そして、彼らはこのように使用することができます:

let f1: ValidatorFnInterface = function (n: number) { 
    return {s: n}; 
}; 

let f2: ValidatorFnType = function (n: number) { 
    return {s: n}; 
}; 

Typescript lib.d.tsは型エイリアスを使用しているようですが、angular2コードはインターフェイスを使用しているようです。私の質問は何を使うのですか?意思決定の際に使用すべきロジックがありますか、それとも好みの問題ですか?

答えて

3

現在、TypeScriptのクラスは、interfacesを実装できません。したがって、一般的に、他のクラスがあなたの型を実装するためのものとして使用できるようにするには、インタフェースを使用する必要があります。同様に、extendの他のインターフェイスだけをインターフェイスすることができます。

インターフェイスの負の側では、交差または結合型を表すことはできません。そのため、1つの単一の型にする場合は、型のエイリアスが残っています。

+0

おかげさまで、関数シグネチャの検証のためにインターフェイスに固執するとはどういうことでしょうか? –

+0

@ Maximusあなたの要件によって異なります。私は個人的には、タイプエイリアスで自分のタイプを表現するのが好きです。しかし、インターフェースはおそらくより安全な賭けであり、より再利用可能です。ありがとう。 – Alex

+0

ありがとう。タイプエイリアスはインターフェイスではなく言語の後ろに表示されましたか?多分、それがangular2がインタフェースを使用する理由です。また、あなたは[this](http://stackoverflow.com/questions/13137350/defining-typescript-callback-type#comment47535906_14249517)について何とお伝えしますか? –

関連する問題