在 AOT 中构建 Angular 模块时出现打字稿错误
Posted
技术标签:
【中文标题】在 AOT 中构建 Angular 模块时出现打字稿错误【英文标题】:Typescript errors when building an Angular module in AOT 【发布时间】:2019-03-16 06:10:37 【问题描述】:我正在使用 Webpack 手动构建一个 Angular 模块,而不使用 CLI。 在进行正常构建时它可以工作,在进行 AOT 构建时它不会!
tsconfig.aot.json如下:
"compilerOptions":
"target": "es5",
"module": "es2015",
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"typeRoots": [
"node_modules/@types"
],
"lib": [
"es5",
"es2015",
"dom"
]
,
"angularCompilerOptions":
"skipMetadataEmit": true,
"genDir": "aot"
错误大多与Typescript有关:
[at-loader] 中的错误 ./node_modules/@types/core-js/index.d.ts:829:20 TS2304:找不到名称“PromiseConstructor”。
[at-loader] 中的错误 ./node_modules/@types/core-js/index.d.ts:1486:36 TS2339:“SymbolConstructor”类型上不存在属性“for”。
[at-loader] 中的错误 ./node_modules/@types/core-js/index.d.ts:1490:43 TS2339:“SymbolConstructor”类型上不存在属性“hasInstance”。
[at-loader] 中的错误 ./node_modules/@types/core-js/index.d.ts:2305:36 TS2339:“SymbolConstructor”类型上不存在属性“for”。
[at-loader] 中的错误 ./node_modules/@types/core-js/index.d.ts:2309:43 TS2339:“SymbolConstructor”类型上不存在属性“hasInstance”。
[at-loader] 中的错误 ./node_modules/@types/core-js/index.d.ts:2313:50 TS2339:“SymbolConstructor”类型上不存在属性“isConcatSpreadable”。
[at-loader] 中的错误 ./node_modules/rxjs/internal/Observable.d.ts:82:59 TS2693:“Promise”仅指一种类型,但在此处用作值。
【问题讨论】:
你的@types/core-js
是什么版本?
"@types/core-js": "~2.5.0",
您在使用 ng serve 编译代码时是否遇到任何错误?
由于错误似乎在库中,如果需要,您可以禁用 TS 检查库类型。为此,在 tsconfig.json 中将 "skipLibCheck": true,
添加到 compilerOptions
@BlizZard 我没有使用 CLI,我是手动操作的。 npm run build
工作正常,当我运行 npm run build:prod
时,我遇到了类型问题。谢谢
【参考方案1】:
正常构建“有效”的原因是因为您在awesome-typescript-loader
上设置了transpileOnly: true
选项,这会禁用所有类型的错误报告。一旦我删除该选项并在tsconfig.json
和tsconfig.aot.json
中将lib
设置设置为相同,我会从npm run build
和npm run build:prod
中得到大致相同的错误。
从您发布的 zip 文件开始,对我有用的一种配置是将 @types/core-js
升级到撰写本文时的最新版本(2.5.0,与您的 core-js
2.5 版本更接近.7 比@types/core-js
0.9.* 是),然后在tsconfig.json
和tsconfig.aot.json
中将target
更改为es6
(并删除覆盖lib
选项)。完成此操作后,npm run build
和 npm run build:prod
都完成了,对我来说没有错误。
【讨论】:
【参考方案2】:在package.json
中使用"@types/core-js": "0.9.35"
,然后运行npm install
。这样就解决了。
【讨论】:
更多错误。我在这里上传了这个小项目:drive.google.com/open?id=1li-zzJLDSVfSAOAYNcTG8AKz5qXREHJp以上是关于在 AOT 中构建 Angular 模块时出现打字稿错误的主要内容,如果未能解决你的问题,请参考以下文章
在 Web Worker 中导入 tensorflow 时出现 Angular 打字稿类型检查问题
Angular 6/7 AOT:动态模板渲染 - 为模块加载 JitCompiler