组合角度模块阵列?

时间:2019-04-29 17:38:12

标签: angular

我正在尝试采用两个ngx模块阵列并将其导出为单个阵列。类似于以下内容:


recorder.stopRecording {(preview, error) in

            preview?.previewControllerDelegate = self
            preview?.modalPresentationStyle = UIModalPresentationStyle.overFullScreen;
            self.viewController.present(preview!, animated: true, completion: nil);
}


为什么这不起作用?我以为,@NgModule({ declarations: [], exports: [ CommonModule, FormsModule, ReactiveFormsModule ].concat([ MatButtonModule, MatMenuModule, MatSidenavModule ]) }) export class CoreModule {} 只是将指向地址的指针组合到一个新数组中,但是我收到的打字稿投诉似乎暗示着,数组要指向哪种东西很重要.concat上班。

注意:除了打字稿错误外,我还遇到诸如“'mat-sidenav-container'不是已知元素”之类的运行时错误。

2 个答案:

答案 0 :(得分:2)

让我用一个简单的例子来说明问题:

[1, 2].concat([3, "4"])

您会收到一条错误消息

  

类型(string|number)[]的参数不能分配给类型number | ConcatArray<number>的参数

因此,这基本上意味着concat期望参数仅是数字数组,因为您引入了[1, 2]数组,TypeScript在第一个数组中将其解释为数字数组地方。

但是,这将起作用,因为基本数组现在为number|string类型,因此concat接受类型为number|string的参数。

[1, "2"].concat([3, "4"])

我希望可以清楚地说明您的问题。因此,要解决您的问题,您可以尝试执行以下操作:

exports: new Array<any>().concat([
    CommonModule, FormsModule, ReactiveFormsModule
  ]).concat([
    MatButtonModule,
    MatMenuModule
  ])

在这种情况下,基本数组为new Array<any>(),并接受any类型的参数。

或者,您也可以执行以下操作:

exports: ([
    CommonModule, FormsModule, ReactiveFormsModule
  ] as any[]).concat([
    MatButtonModule,
    MatMenuModule
  ])

最后但并非最不重要:TypeScript与安全机制有关,这是一种驾驶助手。有时它可能不必要地令人讨厌,但是您可以根据要实现的目标来欺骗系统。例如,以下语法通常是无效的[1, 2, 3] * 4,但仍然可以通过像这样([1, 2, 3] as any) * 4对其进行释义来解决它:但是结果将是NaN,几乎没有用。

答案 1 :(得分:1)

您应该这样写,

const others: any[] = [
    MatButtonModule,
    MatMenuModule
];

,然后使用 ...

@NgModule({
  declarations: [],
  exports: [
    CommonModule, FormsModule, ReactiveFormsModule
  ].concat(...others)
})