如何从我的 Angular 模块中导出 lodash?

How can I export lodash from my Angular module?

我想制作一个具有大量实用方法的通用模块,包括 moment 和 lodash 功能。我已经导入了 lodash 并输入了它,只要包含以下代码,我就可以从我的组件中访问它:

import * as _ from "lodash";

但是,我想让它更通用,这样我就可以只导入我的 Utils 模块并同时使用 lodash 和 moment(以及一些自定义函数),而不必在每个组件中单独导入它们。

我有以下代码:

import { Injectable, NgModule } from "@angular/core";
import * as _ from "lodash";
import * as _ from "moment";

@Injectable()
@NgModule({
    exports: [_, moment]
})
export class Utils { }
}

我收到以下错误:

Build:Argument of type '{ exports: LoDashStatic[] 1>; }' 
   is not assignable to parameter of type 'NgModule'

编辑:我想做的是:

import { _, moment } from "./Utils.module";

而不是

import * as _ from "lodash";
import * as moment from "moment";

我怎样才能做到这一点?

编辑:使代码更多地反映了我想要完成的事情...

这个

@NgModule({
    exports: [_, moment]
})
...

不会工作(感谢 TypeScript,它可以检测类型检查的问题),因为 exports 包含 Angular 模块,而这些是 ES6 模块:

import { _, moment } from "./Utils.module";

相反,它可能不是通常用于 Angular 模块的 .module.ts 文件,而是 utils.ts:

import * as _ from "lodash";
import * as moment from "moment";
export { _, moment };

而且通常情况下,人们永远不希望有一个单独的 'util' 文件来从中导入第三方包,例如 import { _, moment } from "./utils"。该路径是相对的,需要在导入的每个文件中维护。包的路径不是,这是他们的主要优势。

整个事情看起来像模块化的反模式。你不会在设计良好的项目中看到这一点,因为它没有什么意义。我个人建议不要这样做,除非你真的确定你在这里有什么好处。