在 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.jsontsconfig.aot.json 中将lib 设置设置为相同,我会从npm run buildnpm run build:prod 中得到大致相同的错误。

从您发布的 zip 文件开始,对我有用的一种配置是将 @types/core-js 升级到撰写本文时的最新版本(2.5.0,与您的 core-js 2.5 版本更接近.7 比@types/core-js 0.9.* 是),然后在tsconfig.jsontsconfig.aot.json 中将target 更改为es6(并删除覆盖lib 选项)。完成此操作后,npm run buildnpm 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

尝试离子构建时出现角度firebase构建错误

我们可以在 AOT 之后向 Angular 应用程序添加功能模块吗

Angular-cli aot 构建在生产模式下失败

编译节点模块时出现打字稿错误