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

能否通过x typescript命令导出服务常量及DTO默认值至TypeScript?

解决C# DTO默认值导出到TypeScript的方法

你的问题核心是代码生成工具默认只导出类型定义,未同步C#属性的默认值到TS文件中,以下是几种实用的解决办法:

1. 用NSwag工具配置(最常用场景)

如果团队使用NSwag生成TS代码,可通过两步实现默认值同步:

  • 给C# DTO的属性添加[DefaultValue]特性,明确标记默认值:
    using System.ComponentModel;
    
    public class SearchDto
    {
        [DefaultValue("default query")]
        public string DefaultQuery { get; set; } = "default query";
    }
    
  • 修改NSwag的配置文件(比如nswag.json),开启导出默认值的选项:
    {
      "codeGenerators": {
        "typescript": {
          "generateDefaultValues": true,
          // 其他原有配置项...
        }
      }
    }
    

重新生成后,TS文件会自动生成包含默认值的常量对象:

export interface SearchDto {
    defaultQuery: string;
}

export const SearchDtoDefaults: SearchDto = {
    defaultQuery: "default query"
};

2. 基于TypeScriptGenerator工具配置

如果使用TypeScriptGenerator生成代码,只需在配置中开启默认值生成开关:

  • 修改生成配置文件(比如.tsgen):
    <TypeScriptGenerator>
      <GenerateDefaultValues>true</GenerateDefaultValues>
      <!-- 其他配置项 -->
    </TypeScriptGenerator>
    

工具会自动读取C#属性的初始化默认值,同步生成到TS文件中。

3. 手动维护常量(适合小型项目)

若不想调整工具配置,可手动同步两边的常量:

  • 先在C#中把默认值抽成独立常量:
    public static class SearchConstants
    {
        public const string DefaultQuery = "default query";
    }
    
    public class SearchDto
    {
        public string DefaultQuery { get; set; } = SearchConstants.DefaultQuery;
    }
    
  • 再在TS中手动定义对应的常量:
    export const SearchConstants = {
        DefaultQuery: "default query"
    };
    

注意这种方式需要人工同步两边值,适合默认值数量少、变动频率低的场景。

4. 自定义T4模板生成

如果团队用T4模板自定义生成逻辑,可以在模板中通过反射读取C#属性的默认值,再输出到TS里。示例模板片段:

<# foreach (var prop in dtoProperties) { #>
    <#= prop.Name.ToCamelCase() #>: <#= prop.TypeName #> = <#= GetDefaultValue(prop) #>;
<# } #>

自行实现GetDefaultValue方法解析C#属性的初始化值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:50:30