TSTypeFile Generate(IActivityMonitor monitor, TypeScriptGenerator g, Type i)
            {
                var f    = g.GetTSTypeFile(monitor, i);
                var file = f.EnsureFile();

                file.Body.Append("export interface ").Append(f.TypeName);
                bool hasInterface = false;

                foreach (Type b in i.GetInterfaces())
                {
                    if (!hasInterface)
                    {
                        file.Body.Append(" extends ");
                        hasInterface = true;
                    }
                    else
                    {
                        file.Body.Append(", ");
                    }
                    AppendTypeName(file.Body, monitor, g, b);
                }
                file.Body.OpenBlock();
                foreach (var p in i.GetProperties())
                {
                    file.Body.Append(g.ToIdentifier(p.Name)).Append(": ");
                    AppendTypeName(file.Body, monitor, g, p.PropertyType);
                    file.Body.Append(";").NewLine();
                }
                file.Body.CloseBlock();
                return(f);
            }