角度@NgModule导入如果使用[] .concat()合并多个数组,则看不到模块

Mak*_*nko 5 typescript angular

我有很多模块,并且想按类型按几个数组对它进行排序和拆分

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

const bModules: any[] = [
  Module5,
  Module6,
  Module7,
  Module8
]
Run Code Online (Sandbox Code Playgroud)

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

imports: [Module0, ...aModules, ...bModules]
Run Code Online (Sandbox Code Playgroud)

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

imports: [Module0].concat(aModules, bModules)
Run Code Online (Sandbox Code Playgroud)

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

console.log([Module0, ...aModules, ...bModules]);
console.log([Module0].concat(aModules, bModules));
Run Code Online (Sandbox Code Playgroud)

两种结果看起来都一样

Rea*_*lar 3

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

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

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

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