private void WriteType(TypeNode classNode, StringBuilder result, bool edition, PrefixModules prefixModule, bool allowObservable)
 {
     switch (classNode.Type)
     {
         case TypeIdentifier.Boolean:
             result.Append("boolean");
             break;
         case TypeIdentifier.DateTime:
             result.Append(allowObservable ? "Date" : "string");
             break;
         case TypeIdentifier.Object:
             if (allowObservable && classNode.IsObservable)
             {
                 if (prefixModule.HasFlag(PrefixModules.KoViews))
                     result.Append("koViews.");
                 result.Append(classNode.Name);
             }
             else
             {
                 if (prefixModule.HasFlag(PrefixModules.Views))
                     result.Append("views.");
                 result.Append(classNode.CleanName);
             }
             if (edition && classNode.HasReadOnly())
             {
                 result.Append("Edit");
             }
             break;
         case TypeIdentifier.Decimal:
         case TypeIdentifier.Double:
         case TypeIdentifier.Float:
         case TypeIdentifier.Int:
         case TypeIdentifier.Long:
             result.Append("number");
             break;
         case TypeIdentifier.Guid:
         case TypeIdentifier.String:
         case TypeIdentifier.TimeSpan:
             result.Append("string");
             break;
         case TypeIdentifier.Enum:
             if (prefixModule.HasFlag(PrefixModules.Views))
                 result.Append("views.");
             result.Append(classNode.CleanName);
             break;
         case TypeIdentifier.Any:
             result.Append("any");
             break;
         case TypeIdentifier.Union:
             {
                 bool first = true;
                 foreach (var type in classNode.Union)
                 {
                     if (first)
                         first = false;
                     else
                         result.Append(" | ");
                     WriteType(type, result, edition, prefixModule, allowObservable);
                 }
                 break;
             }
     }
 }
        private void WriteTypedNode(ITypedNode typedNode, StringBuilder result, bool edition, PrefixModules prefixModule,
            bool allowObservable)
        {
            if (typedNode.IsDictionary)
            {
                result.Append("{ [key: string]: ");
            }

            WriteType(typedNode.Type, result, edition, prefixModule, allowObservable);

            if (typedNode.IsCollection)
            {
                result.Append("[]");
            }

            if (typedNode.IsDictionary)
            {
                result.Append(" }");
            }
        }