private (string code, CodeDependencies dependencies) GeneratePropertyDefinitions(Type type, ITemplatingEngine templatingEngine) { var propertyCodeSnippets = new List <string>(); var deps = CodeDependencies.Empty; foreach (var property in GetPropertiesForTranspilation(type)) { Logger.WriteInformation($"Translating property {property.Name} on type {type}."); var typeReferenceTranslation = TypeReferenceTranslator.Translate(property.PropertyType); var decorators = DecoratorTranslator.GenerateDecorators(property); deps = deps .Merge(typeReferenceTranslation.Dependencies) .Merge(decorators.Dependencies); propertyCodeSnippets.Add(templatingEngine.UseTemplate("ClassPropertyDefinition", new Dictionary <string, string> { { "Decorators", decorators.DecoratorCode }, { "PropertyName", GetTypeScriptPropertyName(property) }, { "Documentation", GenerateDocumentationComment(property) }, { "PropertyType", typeReferenceTranslation.ReferencedTypeName }, { "Assignment", _defaultValueProvider.Assignment(property) } })); } var properties = string.Join(Environment.NewLine, propertyCodeSnippets); return(properties, deps); }