当使用TypeScript添加ServiceStackVS引用时,生成的.d.ts文件将为任何属于数组的请求DTO属性生成一个错误,即“无法找到名称‘Nullable’”。例如,我有一个请求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; }
...
}此请求DTO生成的接口如下所示:
interface FindEvents extends QueryBase_1<Event>, IReturn<QueryResponse<Event>>
{
...
DateBetween?: Nullable;
MonthBetween?: Nullable;
...
}生成的类型"Nullable“是导致错误的原因。
在服务中,我可以将DateTime?[]和int?[]更改为string[],这将分别生成DateBetween?: string[];和MonthBetween?: string[];。
这将在服务和TypeScript代码中起作用,但我不希望以这种方式更改服务。
有什么建议吗?可以更新ServiceStackVS以处理属于数组的请求DTO属性吗?
谢谢。
发布于 2016-02-23 02:40:26
数组在.NET中已经是可空引用类型,因此不需要指定它也包含可空值类型。
AutoQuery也不处理某些ValueTypes是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; }
}这最终提供了一个更好的强类型API,而属性仍然是可选的。
注意:在TypeScript中,DateTime作为字符串发出,以匹配它们在JSON中的发送方式。
https://stackoverflow.com/questions/35567642
复制相似问题