Visual studio 2015 ServiceStackVS类型脚本引用(.d.ts)错误-“;找不到名称';可为空'&引用;
当使用ServiceStackVS添加TypeScript引用时,生成的.d.ts文件会为属于数组的任何请求DTO属性生成一个错误“找不到名称‘null’”。例如,我有一个查找事件的请求DTO: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")
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中的发送方式
谢谢你,黛米丝-一如既往的好!