You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何限制/types/typescript接口返回的DTO范围?

基于标记属性的DTO筛选解决方案

针对你遇到的全量TypeScript DTO文件体积过大、手动删除易出错的问题,完全可以通过给DTO添加元数据标记+接口参数筛选的方式实现按需生成,具体步骤如下:

1. 给后端DTO添加自定义筛选标记

以.NET栈为例(其他后端栈可类比实现),创建自定义特性来标记DTO所属的服务或站点:

// 自定义筛选特性,支持多标记
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
public class DtoFilterAttribute : Attribute
{
    public string Service { get; set; }
    public string Member { get; set; }
}

// 标记示例:归属服务A且属于siteone站点的DTO
[DtoFilter(Service = "a", Member = "siteone")]
public class ServiceADto {}

// 仅属于sitetwo站点的DTO
[DtoFilter(Member = "sitetwo")]
public class SiteTwoExclusiveDto {}

// 无标记的通用DTO
public class GeneralSharedDto {}

2. 修改TypeScript生成接口的逻辑

在你的/types/typescript接口中,解析URL查询参数并匹配DTO标记,实现按需生成:

  • 无参数时(/types/typescript):仅返回未添加任何DtoFilterAttribute标记的通用DTO
  • 携带service=a参数时:返回所有标记了Service="a"的DTO,同时自动包含这些DTO依赖的关联类型
  • 携带member=siteone/member=sitetwo参数时:返回所有标记了对应站点的DTO及关联依赖类型

3. 处理DTO依赖关联

生成TypeScript代码时,必须递归遍历目标DTO的所有嵌套类型、引用类型,确保依赖的类型也被包含到生成结果中,避免出现未定义的类型错误。

4. 备选方案:拆分生成端点

如果不想通过查询参数实现,也可以直接拆分多个生成接口:

  • /types/typescript/service-a:返回服务A专属DTO
  • /types/typescript/site-one:返回siteone站点专属DTO
  • /types/typescript/general:返回通用无标记DTO

这种方式逻辑更直观,适合不需要灵活组合筛选的场景。

通过以上方案,完全可以替代手动删除无关DTO的操作,实现DTO更新时自动同步生成对应站点/服务的TypeScript文件,既保证了准确性,又节省了维护成本。

内容的提问来源于stack exchange,提问作者Barry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 18:12:16