Je pense que vous avez essentiellement cinq options différentes pour le faire. Choisir parmi eux pourrait être facile selon l'objectif que vous souhaitez atteindre.
La meilleure façon dans la plupart des cas d' utiliser une classe et de l'instancier , car vous utilisez TypeScript pour appliquer la vérification de type.
interface IModal {
content: string;
form: string;
//...
//Extra
foo: (bar: string): void;
}
class Modal implements IModal {
content: string;
form: string;
foo(param: string): void {
}
}
Même si d'autres méthodes offrent des moyens plus faciles de créer un objet à partir d'une interface, vous devriez envisager de séparer votre interface , si vous utilisez votre objet pour différentes questions, et cela ne provoque pas une surségrégation d'interface:
interface IBehaviour {
//Extra
foo(param: string): void;
}
interface IModal extends IBehaviour{
content: string;
form: string;
//...
}
D'un autre côté, par exemple lors des tests unitaires de votre code (si vous n'appliquez pas fréquemment la séparation des problèmes), vous pouvez être en mesure d'accepter les inconvénients pour des raisons de productivité. Vous pouvez appliquer d'autres méthodes pour créer des simulations principalement pour les grandes interfaces tierces * .d.ts. Et il pourrait être difficile de toujours implémenter des objets anonymes complets pour chaque énorme interface.
Sur ce chemin, votre première option est de créer un objet vide :
var modal = <IModal>{};
Deuxièmement, pour réaliser pleinement la partie obligatoire de votre interface . Il peut être utile que vous appeliez des bibliothèques JavaScript tierces, mais je pense que vous devriez plutôt créer une classe, comme avant:
var modal: IModal = {
content: '',
form: '',
//...
foo: (param: string): void => {
}
};
Troisièmement, vous pouvez créer juste une partie de votre interface et créer un objet anonyme , mais de cette façon, vous êtes responsable de l'exécution du contrat
var modal: IModal = <any>{
foo: (param: string): void => {
}
};
Résumant ma réponse même si les interfaces sont facultatives, car elles ne sont pas transposées en code JavaScript, TypeScript est là pour fournir un nouveau niveau d'abstraction, s'il est utilisé avec sagesse et cohérence. Je pense que ce n'est pas parce que vous pouvez les rejeter dans la plupart des cas de votre propre code.