首页 > 解决方案 > 如果使用 [].concat() 组合多个数组,Angular @NgModule 导入不会看到模块

问题描述

我有很多模块,想按类型将其排序和拆分为几个数组

const aModules: any[] = [
  Module1,
  Module2,
  Module3,
  Module4
];

const bModules: any[] = [
  Module5,
  Module6,
  Module7,
  Module8
]

如果使用扩展运算符,它将起作用

imports: [Module0, ...aModules, ...bModules]

但是如果使用 concat 方法它不起作用,如果使用下一个方法,任何组件都将不起作用:

imports: [Module0].concat(aModules, bModules)

这两种方法的打字稿编译器有什么区别?因为如果我们看到

console.log([Module0, ...aModules, ...bModules]);
console.log([Module0].concat(aModules, bModules));

两个结果看起来一样

标签: angulartypescript

解决方案


很难回答这个问题,因为 Angular 编译器的这方面没有太多的文档。在引擎盖下,AOT 编译器重写了装饰器使用的许多元数据,我怀疑这是它无法正确转换的一个例子。

我可以告诉你,这与 TypeScript 或 JavaScript 无关。这是 AOT 编译器的问题。

您可以在此博客中阅读有关转换器的信息:

https://blog.angularindepth.com/do-you-know-how-angular-transforms-your-code-7943b9d32829

您可以在此处找到转换器的源代码:

https://github.com/angular/angular/tree/master/packages/compiler-cli/src/transformers


推荐阅读