TypeLite:如何将IEnumerable <t>转换为任何[]

时间:2015-11-07 17:13:01

标签: c# typescript dto typelite

假设我有以下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

任何帮助将不胜感激!

2 个答案:

答案 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[]" ) #>