private void Render(IndentedStringBuilder sb, CustomType type)
        {
            if (_processedTypes.Contains(type.ClrType))
              {
            return;
              }

              _processedTypes.Add(type.ClrType.IsGenericType ? type.ClrType.GetGenericTypeDefinition() : type.ClrType);

              ProcessBaseType(sb, type);

              var interfaceType = type as InterfaceType;

              sb.AppendLine("export {2} {0}{1} {3}{{", _typeNameGenerator.GetTypeName(type), RenderBaseType(type), interfaceType == null ? "class" : "interface", RenderInterfaces(type));
              sb.IncreaseIndentation();

              foreach (var p in type.Properties)
              {
            Render(sb, p);
              }

              if (_options.CodeGenerationOptions.AdditionalMembers != null)
              {
            foreach (var member in _options.CodeGenerationOptions.AdditionalMembers(type.ClrType))
            {
              sb.AppendLine(member);
            }
              }

              sb.DecreaseIndentation();
              sb.AppendLine("}}");
              sb.AppendLine("");
        }
        private void Render(IndentedStringBuilder sb, EnumType type)
        {
            sb.AppendLine("export enum {0} {{", type.ClrType.Name);
              sb.IncreaseIndentation();

              var values = Enum.GetValues(type.ClrType);
              var names = Enum.GetNames(type.ClrType);

              int i = 0;

              foreach (var val in values)
              {
            var name = names[i];
            i++;

            sb.AppendLine("{0} = {1},", name, Convert.ChangeType(val, typeof(int)));
              }

              sb.DecreaseIndentation();
              sb.AppendLine("}}");
              sb.AppendLine("");
        }
        private void RenderModule(TypeScriptModule module)
        {
            if (_processedModules.Contains(module.Module))
              {
            return;
              }

              _processedModules.Add(module.Module);

              var moduleBuffer = new IndentedStringBuilder(module.ModuleMembers.Count * 256, _options.CodeGenerationOptions.IndentationCharacter, _options.CodeGenerationOptions.IndentationIncrementAmount);

              moduleBuffer.AppendLine("{1}module {0} {{", module.Module, _options.CodeGenerationOptions.GenerateExternalModules ? "export " : "");
              moduleBuffer.IncreaseIndentation();
              moduleBuffer.AppendLine("");

              foreach (var type in module.ModuleMembers)
              {
            Render(moduleBuffer, (dynamic)type);
              }

              moduleBuffer.DecreaseIndentation();
              moduleBuffer.AppendLine("}}");
              moduleBuffer.AppendLine("");

              _sb.AppendLine(moduleBuffer.ToString());
        }
        private void Render(IndentedStringBuilder sb, TypeScriptProperty p)
        {
            var prefixComment = _propertyCommenter.GetPropertyCommentPrefixed(p);

              if (!string.IsNullOrEmpty(prefixComment))
              {
            sb.AppendLine(prefixComment);
              }

              sb.AppendLine("{0} : {1}{2}; {3}", p.Property.Name, _moduleNameGenerator.GetModuleName((dynamic)p.Type), _typeNameGenerator.GetTypeName((dynamic)p.Type), _propertyCommenter.GetPropertyCommentPostfixed(p));
        }