如何用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
相关产品推荐
相关产品推荐

