能否通过NSwag TypeScript Client将.NET抽象类生成为any类型对象?
如何让NSwag为无属性的.NET抽象类生成
any类型而非空类/接口 完全可以实现!针对你遇到的这种无属性抽象类生成空TS类/接口的问题,有几种不同的解决思路,根据你的场景选择即可:
方法一:直接在.NET类上添加特性(最简单)
给你的无属性抽象类添加[JsonSchemaType(typeof(object))]特性,明确告诉NSwag将这个类型映射为TS的any:
using NJsonSchema.Annotations; [JsonSchemaType(typeof(object))] public abstract class IDetectionEngineProfile { // 无属性的抽象类 }
这样NSwag在生成TS客户端时,就不会创建空的IDetectionEngineProfile类和IIDetectionEngineProfile接口,而是直接用any来指代这个类型。
方法二:自定义NSwag Schema处理器(批量处理)
如果你的项目中有很多这类无属性抽象类,不想逐个加特性,可以编写一个自定义的Schema处理器,自动检测无属性的对象类型并将其转换为any:
- 编写处理器类:
using NJsonSchema; using NSwag.Generation.Processors; using NSwag.Generation.Processors.Contexts; public class EmptySchemaProcessor : ISchemaProcessor { public void Process(SchemaProcessorContext context) { var schema = context.Schema; // 判定条件:无属性、不是数组/字典、类型为对象的schema if (schema.Properties.Count == 0 && !schema.IsArray && !schema.IsDictionary && schema.Type == JsonObjectType.Object) { // 将schema类型改为any schema.Type = JsonObjectType.Any; schema.Properties.Clear(); } } }
- 在NSwag配置中引用这个处理器:
如果你用的是nswag.json配置文件,添加以下配置到codeGenerators.typescript节点下:
"schemaProcessors": [ { "type": "YourNamespace.EmptySchemaProcessor, YourAssemblyName", "parameters": {} } ]
如果是用NSwag Studio,可以在「Schema Processors」选项中添加这个处理器的引用。
方法三:调整NSwag生成配置(快速调整)
在NSwag的TypeScript生成设置中,修改以下两个选项:
- 将
GenerateEmptyClasses设置为false - 将
GenerateEmptyInterfaces设置为false - 同时把
DefaultType设置为any
这样NSwag遇到无属性的类型时,不会生成空的类/接口,而是直接使用默认的any类型。注意不同模板(比如Angular、Axios)可能对这些配置的响应略有差异,需要根据你的实际模板微调。
内容的提问来源于stack exchange,提问作者Alexander I.
相关产品推荐
相关产品推荐

