ServiceStackVS TypeScript参考(.d.ts)错误 - "找不到名称' Nullable'。"

时间:2016-02-23 02:21:52

标签: visual-studio-2015 servicestack visual-studio-extensions

使用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属性吗?

感谢。

1 个答案:

答案 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中的发送方式。