Creo que tienes básicamente cinco opciones diferentes para hacerlo. Elegir entre ellos podría ser fácil dependiendo de la meta que le gustaría alcanzar.
La mejor manera en la mayoría de los casos es usar una clase e instanciarla , porque está usando TypeScript para aplicar la verificación de tipos.
interface IModal {
content: string;
form: string;
//...
//Extra
foo: (bar: string): void;
}
class Modal implements IModal {
content: string;
form: string;
foo(param: string): void {
}
}
Incluso si otros métodos ofrecen formas más fáciles de crear un objeto desde una interfaz, debería considerar dividir su interfaz , si está usando su objeto para diferentes asuntos, y no causa una segregación excesiva de la interfaz:
interface IBehaviour {
//Extra
foo(param: string): void;
}
interface IModal extends IBehaviour{
content: string;
form: string;
//...
}
Por otro lado, por ejemplo, durante la prueba de la unidad de su código (si no aplica la separación de preocupaciones con frecuencia), puede aceptar los inconvenientes en aras de la productividad. Puede aplicar otros métodos para crear simulacros principalmente para grandes interfaces de terceros * .d.ts. Y podría ser una molestia implementar siempre objetos anónimos completos para cada interfaz enorme.
En esta ruta, su primera opción es crear un objeto vacío :
var modal = <IModal>{};
En segundo lugar, para realizar completamente la parte obligatoria de su interfaz . Puede ser útil si está llamando a bibliotecas JavaScript de terceros, pero creo que debería crear una clase, como antes:
var modal: IModal = {
content: '',
form: '',
//...
foo: (param: string): void => {
}
};
En tercer lugar, puede crear solo una parte de su interfaz y crear un objeto anónimo , pero de esta manera usted es responsable de cumplir el contrato
var modal: IModal = <any>{
foo: (param: string): void => {
}
};
Resumiendo mi respuesta, incluso si las interfaces son opcionales, ya que no están transpuestas en código JavaScript, TypeScript está allí para proporcionar un nuevo nivel de abstracción, si se usa de manera inteligente y coherente. Creo que, solo porque puedes descartarlos en la mayoría de los casos de tu propio código, no deberías.