在我的angular-cli(最新)项目(ng v5 LTS)的tsconfig.json中,我已经设置(必须保留)
"strictNullChecks": true,
我使用Swagger Codegen(Maven v2.3.1)生成api客户端模型。该命令正在使用这些选项:
`-jar ${jarPath} generate -i ${apiPath} -l typescript-angular -o ${outputPath} --type-mappings Date=string -D withInterfaces=true --additional-properties ngVersion=5`
在.angular-cli.json中,我将生成的文件排除在掉毛之外,例如:
...,
"lint": [
{
...
"exclude": ["**/swagger/**"]
}, ...
当我进行“ ng服务”或“ ng构建”时,会得到多个
error TS2532: Object is possibly 'undefined'
用于生成的配置对象。像这样一个:
...
import { Configuration } from '../configuration';
...
if (this.configuration.apiKeys["Authorization"]) {
headers = headers.set('Authorization',
this.configuration.apiKeys["Authorization"]);
}
...
我也尝试在tslint.json和tsconfig扩展中排除生成的swagger文件,但是没有运气。
是否可以设置Swagger Codegen以生成通过严格的空检查的文件,或者设置Angular CLI以在aot编译过程中省略掉swagger文件的毛发?
注意:我必须使用AOT编译。
我唯一想到的解决方案是以编程方式替换
的所有实例if (this.configuration.apiKeys["Authorization"])
with
if (this.configuration.apiKeys && this.configuration.apiKeys["Authorization"])
或objectHasOwnProperty或类似的评估结果...但这听起来像是强力策略...
答案 0 :(得分:0)
如果实际上总是定义apiKeys
的一种惯用的TypeScript解决方案是使用non-null assertion operator,
新的
!
后缀表达式运算符可用于断言其 在以下类型的上下文中,操作数是非{null
和非undefined
检查器无法得出结论。具体来说,操作x!
产生类型为x
的值,其中排除了null
和undefined
。
所以在您的情况下:
if (this.configuration.!apiKeys["Authorization"]) { ... }
也就是说,使用.hasOwnProperty()
检查也不是坏模式:它是惯用的JavaScript。
(恐怕我对Swagger Codegen不熟悉,也许其他人可以为您的上游工作流提供有用的答案。)