TypeLite:如何将 IEnumerable<T> 转换为 any[]
TypeLite: How to convert IEnumerable<T> to any[]
假设我有以下 C# class:
[TsClass]
public class Results<T>
{
public IEnumerable<T> Values { get; set; }
}
我希望typelite生成如下界面:
interface IResults {
values: any[];
}
(我将 'I' 附加到 class 名称并将 class 属性小写,并且工作正常。)
Typelite 目前正在将 IEnumerable 转换为 IT,我显然不想这样做。 I 被追加,T 是通用类型。
interface IResults {
values: IT[];
}
我查看了以下指向 WithConverter 或 WithFormatter 的 SO 问题。
Typelite: Why is Dictionary<string, object> mapped to KeyValuePair and not to any or [index:string]:any
我还查看了 typelite 文档,但他们没有示例,所以我感到困惑。
http://type.litesolutions.net/doc
如有任何帮助,我们将不胜感激!
我确实让它工作了,但这绝对是一个 hack。有趣的是我没有早点想到它。
<#= ts.Generate(TsGeneratorOutput.Properties).Replace("IT[]", "any[]" ) #>
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)) : "");
})
假设我有以下 C# class:
[TsClass]
public class Results<T>
{
public IEnumerable<T> Values { get; set; }
}
我希望typelite生成如下界面:
interface IResults {
values: any[];
}
(我将 'I' 附加到 class 名称并将 class 属性小写,并且工作正常。)
Typelite 目前正在将 IEnumerable
interface IResults {
values: IT[];
}
我查看了以下指向 WithConverter 或 WithFormatter 的 SO 问题。 Typelite: Why is Dictionary<string, object> mapped to KeyValuePair and not to any or [index:string]:any 我还查看了 typelite 文档,但他们没有示例,所以我感到困惑。 http://type.litesolutions.net/doc
如有任何帮助,我们将不胜感激!
我确实让它工作了,但这绝对是一个 hack。有趣的是我没有早点想到它。
<#= ts.Generate(TsGeneratorOutput.Properties).Replace("IT[]", "any[]" ) #>
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)) : "");
})