我正在尝试采用两个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'不是已知元素”之类的运行时错误。
答案 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)
})