servicestack,visual-studio-extensions,Visual Studio 2015,servicestack,Visual Studio Extensions" /> servicestack,visual-studio-extensions,Visual Studio 2015,servicestack,Visual Studio Extensions" />

Visual studio 2015 ServiceStackVS类型脚本引用(.d.ts)错误-“;找不到名称';可为空'&引用;

Visual studio 2015 ServiceStackVS类型脚本引用(.d.ts)错误-“;找不到名称';可为空'&引用;,visual-studio-2015,servicestack,visual-studio-extensions,Visual Studio 2015,servicestack,Visual Studio Extensions,当使用ServiceStackVS添加TypeScript引用时,生成的.d.ts文件会为属于数组的任何请求DTO属性生成一个错误“找不到名称‘null’”。例如,我有一个查找事件的请求DTO: public class FindEvents : QueryBase<Event> { ... [QueryField(Template = "{Field} BETWEEN {Value1} AND {Value2}", Field = "StartDateTime")

当使用ServiceStackVS添加TypeScript引用时,生成的.d.ts文件会为属于数组的任何请求DTO属性生成一个错误“找不到名称‘null’”。例如,我有一个查找事件的请求DTO:

public class FindEvents : QueryBase<Event> {
    ...

    [QueryField(Template = "{Field} BETWEEN {Value1} AND {Value2}", Field = "StartDateTime")]
    public DateTime?[] DateBetween { get; set; }

    [QueryField(Template = "MONTH({Field}) BETWEEN {Value1} AND {Value2}", Field = "StartDateTime")]
    public int?[] MonthBetween { get; set; }

    ...
}
公共类FindEvents:QueryBase{
...
[QueryField(Template=“{Field}在{Value1}和{Value2}之间”,Field=“StartDateTime”)]
公共日期时间?[]日期介于{get;set;}
[QueryField(Template=“MONTH({Field})介于{Value1}和{Value2}之间”,Field=“StartDateTime”)]
公共int?[]在{get;set;}之间的月数
...
}
此请求DTO的生成接口如下所示:

interface FindEvents extends QueryBase_1<Event>, IReturn<QueryResponse<Event>>
{
    ...

    DateBetween?: Nullable;
    MonthBetween?: Nullable;
    ...

}
接口FindEvents扩展QueryBase_1,IReturn
{
...
DateBeween?:可为空;
MonthBetween?:可为空;
...
}
生成的类型“Nullable”是导致错误的原因

在服务中,我可以将
DateTime?[]
int?[]
更改为
string[]
,这将生成
DateBetween?:string[]
月之间?:字符串[]分别为

这将在服务和TypeScript代码中起作用,但我不希望以这种方式更改服务

有什么建议吗?是否可以更新ServiceStackV以处理请求DTO属性(即数组)


谢谢。

数组在.NET中已经是可为空的引用类型,因此您不需要指定它也包含可为空的值类型

AutoQuery也不处理某些值类型为
null
的数组,因此您只需将数组更改为不可为null的值类型,例如:

public class FindEvents : QueryBase<Event> 
{
    [QueryField(Template = "{Field} BETWEEN {Value1} AND {Value2}", Field = "StartDateTime")]
    public DateTime[] DateBetween { get; set; }

    [QueryField(Template = "MONTH({Field}) BETWEEN {Value1} AND {Value2}", Field = "StartDateTime")]
    public int[] MonthBetween { get; set; }
}
公共类FindEvents:QueryBase
{
[QueryField(Template=“{Field}在{Value1}和{Value2}之间”,Field=“StartDateTime”)]
public DateTime[]DateBetween{get;set;}
[QueryField(Template=“MONTH({Field})介于{Value1}和{Value2}之间”,Field=“StartDateTime”)]
public int[]MonthBetween{get;set;}
}
这最终提供了更好的强类型API,而属性仍然是可选的

注意:日期时间在TypeScript中以字符串形式发出,以匹配它们在JSON中的发送方式


谢谢你,黛米丝-一如既往的好!