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

如何用NSwag生成带默认属性值的TypeScript接口?

能否通过NSwag生成包含默认枚举成员类型的TypeScript接口?

可以实现,但需要自定义NSwag的生成逻辑——默认情况下,NSwag不会将C#类中标记[DefaultValue]特性的枚举属性,转换为TypeScript接口里的枚举成员类型。

默认NSwag的输出

针对你提供的C#代码:

public enum TempType
{
    Good = 1,
    Bad = 2
}

public class Item
{
    [DefaultValue(TempType.Good)] public TempType TempType { get; set; }
}

NSwag默认生成的TypeScript接口是这样的:

export interface Item {
    tempType?: TempType;
}

只会将属性类型设为整个枚举,而非指定的枚举成员。

自定义实现方式

要生成你期望的格式,有两种可行方向:

1. 自定义TypeScript模板

NSwag支持自定义生成模板(可在NSwag Studio中编辑模板,或使用.tt模板文件)。在处理类属性的模板片段中,添加逻辑:

  • 检测当前属性是否带有[DefaultValue]特性
  • 判断该默认值是否为枚举成员
  • 如果满足条件,将属性类型替换为枚举名.枚举成员的格式,最终生成tempType?: TempType.Good;这样的代码。

2. 编写自定义文档处理器

通过NSwag的文档处理器扩展,在Swagger文档生成阶段修改Schema定义:找到带有[DefaultValue]的枚举属性,将其类型指定为对应的枚举成员值。后续TypeScript生成器会基于修改后的Schema,生成带有枚举成员类型的接口。

关于TypeScript枚举成员类型的说明

你提到的联合枚举与枚举成员类型是TypeScript的特性:当枚举成员为字面量类型(如数字、字符串字面量)时,每个成员本身既可以作为值使用,也可以作为独立的类型使用。比如定义枚举TempType后,TempType.Good不仅代表值1,还代表一个只能取该值的类型,因此可以用在接口中限制属性的取值范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 15:50:16