そうするために、基本的に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 => {
}
};
第三に、インターフェイスの一部だけを作成して匿名オブジェクトを作成できますが、この方法では契約を履行する責任があります
var modal: IModal = <any>{
foo: (param: string): void => {
}
};
インターフェイスがオプションであっても私の答えを要約すると、それらは JavaScript コードにトランスパイルされないため、賢明かつ一貫して使用される場合、TypeScript は新しいレベルの抽象化を提供するために存在します。ほとんどの場合、独自のコードからそれらを却下できるからといって、そうすべきではないと思います。