0

我想制作一个具有一堆实用方法的通用模块,包括 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";

我怎样才能做到这一点?

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

4

1 回答 1

2

这个

@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". 该路径是相对的,需要在导入它的每个文件中进行维护。包的路径不是,这是他们的主要优势。

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

于 2017-04-29T21:16:50.523 回答