使用ServiceStackVS添加TypeScript引用时,生成的.d.ts文件会生成错误,"找不到名称' Nullable'。",对于任何请求DTO属性阵列。例如,我有一个Request 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;
...
}
生成的类型&#34; Nullable&#34;是导致错误的原因。
在服务中,我可以将DateTime?[]
和int?[]
更改为string[]
,这将分别生成DateBetween?: string[];
和MonthBetween?: string[];
。
这将在服务和TypeScript代码中起作用 - 但我不希望以这种方式更改服务。
有什么建议吗?可以更新ServiceStackVS来处理作为数组的Request DTO属性吗?
感谢。
答案 0 :(得分:3)
在.NET中,数组已经是可以为空的引用类型,因此您也不需要指定它包含可以为空的值类型。
AutoQuery也不处理某些ValueType为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,而属性仍然是可选的。
注意:DateTime在TypeScript中作为字符串发出,以匹配它们在JSON中的发送方式。