Throughout our application, we represent various data objects as classes. These objects have a tree structure by nature, where parent objects are instantiated with properties that are collections of complex data objects. While we can refer to classes in typing within components, we lose the benefit of excess property type checking that you would get with interfaces. What is the best way to strictly type objects with nested data objects, that also need to use instance methods to access or manipulate properties of the object? Should we be using constructors with generic types?
Current Implementation Example: // DataModel is a class with id, type, name and title properties - we extend from this class a lot. export class Datasource extends DataModel { features: Array<Feature>; tables: Array<DatasourceTable>; isSelected: boolean; constructor(options) { options.typ = 'datasource'; super(options); this.features = (options.features) ? options.features : []; this.tables = (options.tables) ? options.tables : []; this.isSelected = (typeof options.isSelected !== 'undefined') ? options.isSelected : false; } get selectedTable() { /* find and return the DatasourceTable that has an isSelected property set to true. */ } } In the above instance, you could pass an object that missed some properties, or had properties that should not have been included, and it would not throw an error. You are also required to instantiate the array properties of the class, setting default values either in the property definition or in the constructor. What is the best way to strictly type complex data objects without losing the benefits that come with being able to construct instances of classes that have public methods? I'm not sure if we should be using generic types, or pairing classes with interfaces, but there has to be a good approach for this. -- You received this message because you are subscribed to the Google Groups "Angular and AngularJS discussion" group. To unsubscribe from this group and stop receiving emails from it, send an email to angular+unsubscr...@googlegroups.com. To post to this group, send email to angular@googlegroups.com. Visit this group at https://groups.google.com/group/angular. For more options, visit https://groups.google.com/d/optout.