typescript - Angular 5 + Swagger Codegen && Kiểm tra Null nghiêm ngặt
Trong tsconfig.json của dự án angular-cli (phiên bản mới nhất) của tôi (ng v5 LTS) tôi đã thiết lập (và phải giữ nó)
"strictNullChecks": true,
Tôi sử dụng Swagger Codegen (Maven v2.3.1) để tạo các mô hình khách hàng API. Lệnh đang sử dụng các tùy chọn sau:
`-jar ${jarPath} generate -i ${apiPath} -l typescript-angular -o ${outputPath} --type-mappings Date=string -D withInterfaces=true --additional-properties ngVersion=5`
Trong .angular-cli.json tôi loại trừ các tệp được tạo ra khỏi việc kiểm tra lint như sau:
...,
"lint": [
{
...
"exclude": ["**/swagger/**"]
}, ...
Khi tôi thực hiện 'ng serve' hoặc 'ng build', tôi nhận được nhiều
error TS2532: Object is possibly 'undefined'
cho đối tượng cấu hình được tạo. Như cái này:
...
import { Configuration } from '../configuration';
...
if (this.configuration.apiKeys["Authorization"]) {
headers = headers.set('Authorization',
this.configuration.apiKeys["Authorization"]);
}
...
Tôi đã cố gắng loại trừ các tệp swagger được tạo trong tslint.json và cả phần mở rộng tsconfig nhưng không thành công.
Có cách nào để thiết lập Swagger Codegen tạo ra các tệp vượt qua kiểm tra null nghiêm ngặt hoặc để thiết lập Angular CLI bỏ kiểm tra lint các tệp swagger trong quá trình biên dịch aot không?
CHÚ Ý: Tôi phải sử dụng biên dịch AOT.
Giải pháp duy nhất mà tôi có thể nghĩ đến là lập trình để thay thế tất cả các trường hợp của
if (this.configuration.apiKeys["Authorization"])
với
if (this.configuration.apiKeys && this.configuration.apiKeys["Authorization"])
hoặc objectHasOwnProperty hoặc đánh giá tương tự ... nhưng điều đó nghe có vẻ như là một chiến lược cưỡng bức ...
Câu trả lời #1
Một giải pháp TypeScript theo thành ngữ nếu thực sự apiKeys luôn được định nghĩa là sử dụng toán tử xác nhận không null,
Một toán tử biểu thức hậu tố
!mới có thể được sử dụng để khẳng định rằng toán hạng của nó không phảinullvà không phảiundefinedtrong những bối cảnh mà trình kiểm tra kiểu không thể kết luận được điều đó. Cụ thể, phép toánx!tạo ra một giá trị có kiểu giống kiểu củaxnhưng loại trừnullvàundefined.
Vậy trong trường hợp của bạn:
if (this.configuration.!apiKeys["Authorization"]) { ... }
Nói điều đó, việc sử dụng kiểm tra .hasOwnProperty() cũng không phải là một mẫu xấu: nó là JavaScript theo kiểu thông thường.
(Tôi e rằng tôi không quen thuộc với Swagger Codegen, có lẽ ai đó khác có thể đưa ra câu trả lời hữu ích cho quy trình công việc upstream của bạn.)
