La manière la plus simple d'atteindre cet objectif est d'étendre le TsGenerator
. Créez un fichier nommé TsAngularJsModelGenerator.ttinclude
dans le même répertoire que votre fichier TypeLite.Net4.tt
, et coller les éléments suivants:
<#@ assembly name="$(TargetDir)\TypeLite.dll" #>
<#@ assembly name="$(TargetDir)\TypeLite.Net4.dll"#>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="TypeLite" #>
<#@ import namespace="TypeLite.TsModels" #>
<#+
class TsAngularJsModelGenerator : TsGenerator
{
protected override void AppendClassDefinition(TsClass classModel, ScriptBuilder sb, TsGeneratorOutput generatorOutput)
{
string typeName = this.GetTypeName(classModel);
string visibility = this.GetTypeVisibility(classModel, typeName) ? "export " : "";
sb.AppendFormatIndented("{0}interface {1}", visibility, typeName);
if (classModel.BaseType != null)
{
sb.AppendFormat(" extends {0}", this.GetFullyQualifiedTypeName(classModel.BaseType));
}
else
{
sb.AppendFormat(" extends ng.resource.IResource<{0}>", typeName);
}
sb.AppendLine(" {");
var members = new List<TsProperty>();
if ((generatorOutput & TsGeneratorOutput.Properties) == TsGeneratorOutput.Properties)
members.AddRange(classModel.Properties);
if ((generatorOutput & TsGeneratorOutput.Fields) == TsGeneratorOutput.Fields)
members.AddRange(classModel.Fields);
using (sb.IncreaseIndentation())
{
foreach (var property in members)
{
if (property.IsIgnored)
continue;
var propTypeName = this.GetPropertyType(property);
sb.AppendLineIndented(string.Format("{0}: {1};", this.GetPropertyName(property), propTypeName));
}
}
sb.AppendLineIndented("}");
_generatedClasses.Add(classModel);
}
} #>
Note: Vous aurez probablement besoin de changer les deux premières lignes pour pointer vers un emplacement valide pour vous (I a constaté que dans le répertoire MVC bin
ne contient pas toujours les TypeLite.dll
et TypeLite.Net4.dll
binaires - si vous avez des difficultés à se rappeler définir la valeur de debug
à true
dans la première ligne du fichier TypeLite.Net4.tt
pour obtenir de meilleurs diagnostics).
Ensuite, ajoutez à votre TypeLite.Net4.tt
fichier la ligne suivante sous la ligne <#@include file="Manager.ttinclude"#>
:
<#@include file="TsAngularJsModelGenerator.ttinclude"#>
Enfin, dans le fichier TypeLite.Net4.tt
changer l'appel à TypeScript.Definitions
, en passant une nouvelle instance de TsAngularJsModelGenerator
comme suit:
<# var ts = TypeScript.Definitions(new TsAngularJsModelGenerator())
.WithReference("Enums.ts")
.ForLoadedAssemblies();
#>
Merci jusqu'à présent. Je vais essayer de l'implémenter de cette façon. Entrera en contact ensuite – MacX