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

能否通过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:

  1. 编写处理器类:
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();
        }
    }
}
  1. 在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.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 22:27:40