首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >添加重量级依赖关系的TypeLite生成

添加重量级依赖关系的TypeLite生成
EN

Stack Overflow用户
提问于 2015-08-17 11:22:57
回答 1查看 883关注 0票数 3

我目前正在使用一个客户端构建,在TypeScript中使用TypeScript 1.x,在C#中使用AspNet WebApi后端。

为了与后端通信,我从角度使用$resource。通过使用此服务,我用TypeLITE生成的模型接口必须扩展

代码语言:javascript
复制
ng.resource.IResource<IModel> 

是否可以自动扩展由角描述的这个接口生成的所有模型接口?

否则,一切都要像这样分开做

代码语言:javascript
复制
export interface Model extends ng.resource.IResource<Model> {
}

非常感谢,MacX

EN

回答 1

Stack Overflow用户

发布于 2017-02-01 20:41:18

实现这一点以扩展TsGenerator的最简单方法。在与您的TsAngularJsModelGenerator.ttinclude文件相同的目录中创建一个名为TypeLite.Net4.tt的文件,并粘贴以下内容:

代码语言:javascript
复制
<#@ 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);
    }
} #>

注意:您可能需要更改前两行以指向有效的位置(我发现,在MVC下,bin目录并不总是包含TypeLite.dllTypeLite.Net4.dll二进制文件--如果遇到困难,记得在TypeLite.Net4.tt文件的第一行中将debug的值设置为true以获得更好的诊断信息)。

接下来,在TypeLite.Net4.tt文件中添加<#@include file="Manager.ttinclude"#>行下面的一行

代码语言:javascript
复制
<#@include file="TsAngularJsModelGenerator.ttinclude"#>

最后,在TypeLite.Net4.tt文件中更改对TypeScript.Definitions的调用,传递TsAngularJsModelGenerator的一个新实例,如下所示:

代码语言:javascript
复制
<# var ts = TypeScript.Definitions(new TsAngularJsModelGenerator())
    .WithReference("Enums.ts")
    .ForLoadedAssemblies();
#>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32049119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档