首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >排除TypeLite中的间接类生成

排除TypeLite中的间接类生成
EN

Stack Overflow用户
提问于 2015-10-07 19:54:49
回答 1查看 981关注 0票数 1

如果我的类使用另一个类,TypeLite将为另一个类生成一个定义,即使它没有用TsClass标记(或者通过.For包括)。如果我有:

代码语言:javascript
复制
[TsClass]
public class Poco {
    public Guid Id { get; set;}
}

TypeLite将生成以下内容:

代码语言:javascript
复制
interface Poco {
    Id: Guid;
}
interface Guid {
}

我想指示TypeLite省略Guid的接口--我已经在其他地方定义了它,并且正在使用<reference path=在生成的文件中引用它。我能够使用以下技巧(有条件地)阻止TypeLite生成模块包装器:

代码语言:javascript
复制
.WithModuleNameFormatter(( moduleName) => "")

我在课堂上找不到类似的东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-07 21:59:10

TypeLite版本>= 1.5.0

由于版本1.5.0,您可以将[TsIgnore]属性放在类上。这样的类的定义不会在输出文件中生成,但是如果属性引用了被忽略的类,则属性的类型将被保留。

旧答案对版本< 1.5.0有效

底层的TypeLite基础结构支持这种行为,但不幸的是,它既没有出现在[TsClass]属性中,也没有出现在fluent配置类中。但是,您可以直接在TsModelBuilder文件中使用.tt类。

要使其工作,需要从[TsClass]类中删除Poco属性,并将其手动添加到.tt文件中的模型中。然后添加一个自定义MemberTypeFormatter,它覆盖特定类型属性的输出。

代码语言:javascript
复制
<# 
    var ts = TypeScript
        .Definitions()
        .WithReference("Enums.ts")
        .ForLoadedAssemblies();
        .WithMemberTypeFormatter((TsProperty tsProperty, string memberTypeName) => {
            var externalDefinitions = new string[] { "Poco" };
            var propertyInfo = tsProperty.MemberInfo as System.Reflection.PropertyInfo;
            if (propertyInfo != null && externalDefinitions.Contains(propertyInfo.PropertyType.Name)) {
                return propertyInfo.PropertyType.Name;
            }

            var asCollection = tsProperty.PropertyType as TsCollection;
            var isCollection = asCollection != null;

            return memberTypeName + (isCollection ? string.Concat(Enumerable.Repeat("[]", asCollection.Dimension)) : "");
        });
    ts.ModelBuilder.Add<Poco>(false);
#>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33001280

复制
相关文章

相似问题

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