假设我有以下C#类:
[TsClass]
public class Results<T>
{
public IEnumerable<T> Values { get; set; }
}
我希望typelite生成以下界面:
interface IResults {
values: any[];
}
(我在类名称后附加一个'I'并小写类属性,并且工作正常。)
Typelite目前正在转换IEnumerable&lt; T&gt;对IT,我显然不想要。我被追加,T是泛型。
interface IResults {
values: IT[];
}
我看过以下SO问题,指向WithConverter或WithFormatter。 Typelite: Why is Dictionary<string, object> mapped to KeyValuePair and not to any or [index:string]:any 我也查看了类型文档,但它们没有示例,所以我感觉卡住了。 http://type.litesolutions.net/doc
任何帮助将不胜感激!
答案 0 :(得分:1)
TypeLite有很多扩展点,但遗憾的是文档并未涵盖所有扩展点。为此目标,您可以使用自己的TsMemberTypeFormatter
.WithMemberTypeFormatter((tsProperty, memberTypeName) => {
var asCollection = tsProperty.PropertyType as TypeLite.TsModels.TsCollection;
var isCollection = asCollection != null;
if(tsProperty.GenericArguments.Count == 1 &&
tsProperty.GenericArguments[0] is TypeLite.TsModels.TsClass &&
((TypeLite.TsModels.TsClass)tsProperty.GenericArguments[0]).Name =="T") {
memberTypeName = "any";
}
return memberTypeName + (isCollection ? string.Concat(Enumerable.Repeat("[]", asCollection.Dimension)) : "");
})
答案 1 :(得分:0)
我确实让这个工作,但它绝对是一个黑客。好笑,我没有早点想到它。
<#= ts.Generate(TsGeneratorOutput.Properties).Replace("IT[]", "any[]" ) #>