如果我的类使用另一个类,TypeLite将为另一个类生成一个定义,即使它没有用TsClass标记(或者通过.For包括)。如果我有:
[TsClass]
public class Poco {
public Guid Id { get; set;}
}TypeLite将生成以下内容:
interface Poco {
Id: Guid;
}
interface Guid {
}我想指示TypeLite省略Guid的接口--我已经在其他地方定义了它,并且正在使用<reference path=在生成的文件中引用它。我能够使用以下技巧(有条件地)阻止TypeLite生成模块包装器:
.WithModuleNameFormatter(( moduleName) => "")我在课堂上找不到类似的东西。
发布于 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,它覆盖特定类型属性的输出。
<#
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);
#>https://stackoverflow.com/questions/33001280
复制相似问题