Myślę, że masz w zasadzie pięć różnych opcji . Wybór spośród nich może być łatwy w zależności od celu, który chcesz osiągnąć.
W większości przypadków najlepszym sposobem jest użycie klasy i utworzenie jej instancji , ponieważ do sprawdzania typu używasz TypeScript.
interface IModal {
content: string;
form: string;
//...
//Extra
foo: (bar: string): void;
}
class Modal implements IModal {
content: string;
form: string;
foo(param: string): void {
}
}
Nawet jeśli inne metody oferują łatwiejsze sposoby tworzenia obiektu z interfejsu, powinieneś rozważyć podzielenie interfejsu na siebie, jeśli używasz swojego obiektu do różnych spraw i nie powoduje to nadmiernej segregacji interfejsu:
interface IBehaviour {
//Extra
foo(param: string): void;
}
interface IModal extends IBehaviour{
content: string;
form: string;
//...
}
Z drugiej strony, na przykład podczas testowania jednostkowego kodu (jeśli często nie stosujesz separacji problemów), możesz zaakceptować wady ze względu na produktywność. Możesz zastosować inne metody tworzenia makiet głównie dla dużych interfejsów * .d.ts innych firm. I zawsze może być problem z implementacją w pełni anonimowych obiektów dla każdego ogromnego interfejsu.
Na tej ścieżce pierwszą opcją jest utworzenie pustego obiektu :
var modal = <IModal>{};
Po drugie, aby w pełni zrealizować obowiązkową część interfejsu . Może to być przydatne, niezależnie od tego, czy wywołujesz biblioteki JavaScript innych firm, ale myślę, że powinieneś utworzyć klasę, tak jak wcześniej:
var modal: IModal = {
content: '',
form: '',
//...
foo: (param: string): void => {
}
};
Po trzecie, możesz stworzyć tylko część swojego interfejsu i stworzyć anonimowy obiekt , ale w ten sposób jesteś odpowiedzialny za wykonanie umowy
var modal: IModal = <any>{
foo: (param: string): void => {
}
};
Podsumowując moją odpowiedź, nawet jeśli interfejsy są opcjonalne, ponieważ nie są transponowane do kodu JavaScript, TypeScript zapewnia nowy poziom abstrakcji, jeśli jest używany mądrze i konsekwentnie. Myślę, że tylko dlatego, że możesz usunąć je w większości przypadków z własnego kodu, nie powinieneś.