Angular 12中NSwag自动生成代码_observableOf(null)类型报错解决方案问询
解决方案
根因说明
该问题是NSwag v13.10及以上版本的默认生成逻辑变更导致的:TypeScript/Angular客户端生成时默认关闭了返回值泛型的显式声明,同时移除了null值的<any>强转逻辑,因此在Angular开启strict严格模式后会触发类型不匹配报错。
最优方案:调整NSwag生成配置
该方案无需修改生成后的代码,也不需要关闭项目严格模式,直接从生成源头恢复旧版本的输出逻辑即可。
若使用nswag.json配置文件生成
在配置文件的codeGenerators → swaggerToTypeScriptClient节点下新增/修改两个配置项:
{ "codeGenerators": { "swaggerToTypeScriptClient": { // 显式声明返回值的泛型类型 "explicitOperationReturnTypes": true, // 开启null值的any强转逻辑,匹配旧版本生成规则 "castNullToAny": true } } }
修改完成后重新执行代码生成命令,输出的返回语句就会恢复为return _observableOf<MyClassData>(<any>null);的旧写法。
若使用NSwagStudio可视化工具生成
操作路径如下:
- 打开本地的
.nswag配置文件 - 切换到左侧「TypeScript Client」选项卡
- 找到「Settings」分类,勾选 Explicit operation return types(显式操作返回类型)
- 找到「Null value handling(空值处理)」下拉选项,选择
Cast to any - 保存配置后重新生成代码即可生效。
兜底兼容方案
如果当前使用的NSwag版本存在配置不生效的bug,可以通过扩展全局类型的方式兼容,不需要调整生成逻辑也不影响严格模式校验:
在项目的全局类型声明文件(一般为src/typings.d.ts或src/@types/index.d.ts)中新增如下声明:
import type { Observable } from "rxjs"; declare function _observableOf<T>(value: T | null): Observable<T>;
内容的提问来源于stack exchange,提问作者Yogurtu
相关产品推荐
相关产品推荐

