【问题标题】:ServiceStackVS TypeScript Reference (.d.ts) Errors - "Cannot find name 'Nullable'."ServiceStackVS TypeScript 参考 (.d.ts) 错误 - “找不到名称 'Nullable'。”
【发布时间】:2016-02-23 02:21:51
【问题描述】:

使用 ServiceStackVS 添加 TypeScript 引用时,生成的 .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; }

    ...
}

为这个 Request 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 属性吗?

谢谢。

【问题讨论】:

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


    【解决方案1】:

    数组在 .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,而属性仍然是可选的。

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

    【讨论】:

    • 谢谢,Demis - 一如既往的棒!
    猜你喜欢
    • 2022-01-23
    • 2016-01-24
    • 2021-12-05
    • 2019-10-22
    • 2017-06-23
    • 2018-08-22
    • 2021-01-27
    • 2016-11-12
    相关资源
    最近更新 更多