基本的には、5つの異なるオプションがあると思います。それらの中から選択することは、達成したい目標によっては簡単かもしれません。
TypeScriptを使用して型チェックを適用しているため、ほとんどの場合、クラスを使用してインスタンス化する最善の方法。
interface IModal {
content: string;
form: string;
//...
//Extra
foo: (bar: string): void;
}
class Modal implements IModal {
content: string;
form: string;
foo(param: string): void {
}
}
他のメソッドがインターフェイスからオブジェクトを作成する簡単な方法を提供している場合でも、オブジェクトをさまざまな問題に使用していて、インターフェイスの過剰分離が発生しない場合は、インターフェイスを分割することを検討する必要があります。
interface IBehaviour {
//Extra
foo(param: string): void;
}
interface IModal extends IBehaviour{
content: string;
form: string;
//...
}
一方、たとえばコードの単体テスト中に(懸念の分離を頻繁に適用しない場合)、生産性のために欠点を受け入れることができる場合があります。他のメソッドを適用して、主に大規模なサードパーティの* .d.tsインターフェース用のモックを作成できます。そして、すべての巨大なインターフェースに常に完全な匿名オブジェクトを実装することは、骨の折れる作業です。
このパスでは、最初のオプションは空のオブジェクトを作成することです:
var modal = <IModal>{};
次に、インターフェースの必須部分を完全に実現します。サードパーティのJavaScriptライブラリを呼び出すかどうかは便利ですが、以前のように、代わりにクラスを作成する必要があると思います。
var modal: IModal = {
content: '',
form: '',
//...
foo: (param: string): void => {
}
};
3番目に、インターフェースの一部のみを作成して匿名オブジェクトを作成できますが、この方法で契約を履行する必要があります
var modal: IModal = <any>{
foo: (param: string): void => {
}
};
インターフェースがオプションであっても私の回答を要約すると、それらはJavaScriptコードに変換されないため、TypeScriptは、賢く一貫して使用される場合に、新しいレベルの抽象化を提供します。ほとんどの場合、あなた自身のコードからそれらを却下できるからといって、そうすべきではないと私は思います。