如果我的类使用另一个类,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) => "")
我找不到任何类似的东西。
答案 0 :(得分:1)
TypeLite版本&gt; = 1.5.0
从版本1.5.0开始,您可以在类上放置[TsIgnore]
属性。类的定义不会在输出文件中生成,但如果属性引用了忽略的类,则会保留属性的类型。
OLD ANSWER对版本有效&lt; 1.5.0 强>
底层的TypeLite基础架构支持这种行为,但不幸的是它既不会在[TsClass]
属性也不会在fluent配置类中出现。但是,您可以直接在.tt文件中使用TsModelBuilder
类。
要使其正常工作,您需要从[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);
#>