gpt4 book ai didi

c# - ServiceStack - 强制为某些类生成 Typescript 类型

转载 作者:搜寻专家 更新时间:2023-10-30 20:57:11 25 4
gpt4 key购买 nike

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

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

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

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

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

但是,需要创建多个 Gadget 类,因此我重构为让小工具从基类和接口(interface)派生:

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; }
}

我重构了我们的端点来代替接口(interface):

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

这很好用。由于我们使用 QueryData ,我们可以创建一个 List<IGadget> 作为响应发回,其中包含每个实现类型。

我遇到的问题是获取为派生类生成的 Typescript 类型,例如 GadgetBaseTabbedGadget 。我明白为什么它们没有自动生成,因为 API 元数据中没有使用这些类型,但到目前为止,我对如何与 Typescript 客户端进行通信一无所知,该列表可能包含实现 IGadget 的具体数量的类型,以及如何生成这些类型。

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

提前致谢!

最佳答案

我强烈推荐 using interfaces in DTOs ,可以让多个请求 DTO 实现相同的接口(interface),但不应使用它来代替具体的 DTO。

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

public class DummyHolder : IReturnVoid
{
public GadgetDto GadgetDto { get; set; }
//...
}

public class DummyService : Service
{
public void Any(DummyHolder request){}
}

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

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

关于c# - ServiceStack - 强制为某些类生成 Typescript 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49036213/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com