Я думаю, что у вас есть пять различных вариантов сделать это. Выбор среди них может быть легким в зависимости от цели, которую вы хотели бы достичь.
В большинстве случаев лучше всего использовать класс и создавать его экземпляры , потому что вы используете 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 обеспечивает новый уровень абстракции, если используется разумно и последовательно. Я думаю, просто потому, что вы можете отклонить их в большинстве случаев из своего собственного кода, вы не должны этого делать.