【问题标题】:ServiceStack - Force generation of Typescript types for certain classesServiceStack - 为某些类强制生成 Typescript 类型
【发布时间】:2018-02-28 18:26:09
【问题描述】:

我正在使用一个主要专注于 ServiceStack API 的后端和一个与之交互的 Typescript 前端(带有 ServiceStack JsonServiceClient)。这是一个大型项目,因此扩展能力非常重要,我们的目标是始终拥有强大的类型执行力。到目前为止一切进展顺利,但我在这里遇到了障碍。

我们有一个实体,我称之为Gadget

public class GadgetDto
{
    public int Id { get; set; }
    // other stuff...
}

通过 AutoQuery,我们有一个返回列表 Gadgets 的端点:

[Route("/query/gadgets", HttpMethods.Get)]
public class QueryableGadget : QueryData<GadgetDto>
{
}

然而,需要创建Gadgets 的多个类,因此我已经重构,让小工具从基类和接口派生:

public interface IGadget
{
    int Id { get; set; }
}

public abstract class GadgetBase : IGadget
{
    public int Id { get; set; }
}

public class TabbedGadget : GadgetBase
{
    public List<Tab> Tabs { get; set; }
}

我已经重构了我们的端点以取而代之的是接​​口:

[Route("/query/gadgets", HttpMethods.Get)]
public class QueryableGadget : QueryData<IGadget>

这很好用。由于我们使用的是QueryData,因此我们可以创建一个List&lt;IGadget&gt;,将其作为响应发回,其中包含每个实现类型。

我遇到的问题是为派生类生成 Typescript 类型,例如 GadgetBaseTabbedGadget。我理解为什么它们不是自动生成的,因为 API 元数据中没有使用这些类型,但到目前为止,我不知道如何与 Typescript 客户端通信,该列表可能包含实现 @ 的具体数量的类型987654333@,以及如何生成这些类型。

有没有办法,通过一些 ServiceStack 属性或通过不同的方法,我可以“强制”生成这些 Typescript 类型并将它们暴露在元数据中 (/types/typescript)?

提前谢谢!

【问题讨论】:

    标签: c# typescript servicestack servicestack-autoquery


    【解决方案1】:

    我强烈建议不要使用using interfaces in DTOs,让多个请求 DTO 实现相同的接口很好,但不应使用它来代替具体的 DTO。

    话虽如此,您可以创建一个 Dummy 服务来保存对所有 DTO 的引用,例如:

    public class DummyHolder : IReturnVoid
    {
        public GadgetDto GadgetDto { get; set; }
        //...
    }
    
    public class DummyService : Service
    {
        public void Any(DummyHolder request){}
    }
    

    或者,您可以将它们添加到 ExportTypes 中预定义的 NativeTypesFeature AppHost.Configure()

    var nativeTypes = this.GetPlugin<NativeTypesFeature>();
    nativeTypes.MetadataTypesConfig.ExportTypes.Add(typeof(GadgetDto));
    

    【讨论】:

    • 优秀。我同意不使用接口,尤其是 Typescript 如何使用它们。当试图创建一个可以容纳所有类型并流入端点的List&lt;IGadget&gt; 时,该接口出现了。但再一次,@mythz 来救援了。再次感谢您在社区中如此活跃!
    猜你喜欢
    • 2019-12-19
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    • 2010-12-07
    相关资源
    最近更新 更多