/// <summary> /// AddBaseTypes /// </summary> /// <param name="statementSource"></param> private string AddBaseTypes(string statementSource) { //add baseTypes if (BaseTypes.Any()) { //check if there are only interfaces and classes in the basetype list if (BaseTypes.Any(el => el.ElementType == TsElementTypes.Enumerations)) { throw new Exception(string.Format("Type ({0}) contains baseTypes which are not interface/class", Name)); } //if this element is a class, we need to add the baseType if (ElementType == TsElementTypes.Class) { //if there is more than one baseType which is not an interface, throw exeption, bec we can only extend a single class if (BaseTypes.Count(el => el.ElementType == TsElementTypes.Class) > 1) { throw new Exception(string.Format("Type ({0}) can only only extend one baseclass", Name)); } //Get baseType var baseType = BaseTypes.FirstOrDefault(el => el.ElementType == TsElementTypes.Class); if (baseType != null) { statementSource = string.Format(TsDomConstants.TS_BASETYPE_EXTENDS_FORMAT, statementSource, baseType.TsTypeName); } //a class can only implement interfaces List <TsCodeTypeReference> implementTypes = BaseTypes.Where(el => el.ElementType == TsElementTypes.Interface).ToList(); if (implementTypes.Count > 0) { var typeStringList = implementTypes.Select(el => el.TsTypeName); //combine types var implementsString = string.Join(TsDomConstants.TS_BASETYPE_SEPERATOR, typeStringList); //combine type statementSource = string.Format(TsDomConstants.TS_BASETYPE_IMPLEMENTS_FORMAT, statementSource, implementsString); } } else if (ElementType == TsElementTypes.Interface) { //interface impelments everything including types and baseTypes List <TsCodeTypeReference> implementTypes = BaseTypes.ToList(); if (implementTypes.Count > 0) { var typeStringList = implementTypes.Select(el => el.TsTypeName); //combine types var implementsString = string.Join(TsDomConstants.TS_BASETYPE_SEPERATOR, typeStringList); //combine type statementSource = string.Format(TsDomConstants.TS_BASETYPE_EXTENDS_FORMAT, statementSource, implementsString); } } //if we are using constants add all interface types else if (ElementType == TsElementTypes.Constant) { List <TsCodeTypeReference> implementTypes = BaseTypes.ToList(); if (implementTypes.Count > 0) { var implementsString = string.Join(TsDomConstants.MULTIPLETYPE_SEPERATOR, implementTypes.Select(el => el.Name)); //combine type statementSource = string.Format(TsDomConstants.TS_ELEMENT_TYPE_FORMAT, statementSource, implementsString); } } } return(statementSource); }