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); }
void AppendTypeName(ITSFileBodySection body, IActivityMonitor monitor, TypeScriptGenerator g, Type t) { if (t == typeof(int) || t == typeof(float) || t == typeof(double)) { body.Append("number"); } else if (t == typeof(bool)) { body.Append("boolean"); } else if (t == typeof(string)) { body.Append("string"); } else if (t == typeof(object)) { body.Append("unknown"); } else { var other = g.GetTSTypeFile(monitor, t); body.File.Imports.EnsureImport(other.TypeName, other.EnsureFile()); body.Append(other.TypeName); } }
public bool GenerateCode(IActivityMonitor monitor, TypeScriptGenerator g) { Generate(monitor, g, typeof(ICommandOne)); Generate(monitor, g, typeof(ICommandTwo)); Generate(monitor, g, typeof(ICommandThree)); // Skip "object CommandModel" property for ICommand. var f = g.GetTSTypeFile(monitor, typeof(ICommand)); f.EnsureFile().Body.Append("export interface ").Append(f.TypeName).OpenBlock().CloseBlock(); return(true); }