【问题标题】:How can I centrally import a TypeScript class into an Angular Module?如何将 TypeScript 类集中导入 Angular 模块?
【发布时间】:2017-08-26 04:31:52
【问题描述】:

是否有推荐的方法将 TypeScript 类导入 Angular 模块,以便该模块中的每个组件或服务都继承这些定义?

核心问题是“为什么导入到模块中的类不会自动导入到该模块中的其他组件中?”

我尝试将一个类导入到模块中,如下所示:

registration.model.ts:

export class Event {
  id: string;
  name: string;
}

registration.module.ts:

import { Event } from './registration.model';

我也将它添加到模块中的声明中,但没有任何效果(我一发现它什么也没做,我就从声明数组中删除了它):

declarations: [
    Event,
    ...
]

registration.service.ts:

getEvents(): Observable<Event[]> {

  return this.http.get(`api/events`)
    .map(response => response.json());

}

产生此错误,应用无法编译:

错误 C:/code/registration/src/app/registration/registration.service.ts (26,29):找不到名称“事件”。

如果我将导入直接添加到 registration.service.ts 中,那么错误就会消失,一切都会正确编译:

import { Event } from './registration.model';

我已验证模块中的相对路径是正确的。我可以将其更改为模块中的绝对路径,我会在服务中得到相同的错误。

后续编辑 感谢阿德里安的回应,我现在对此有了更好的理解。我还发现您可以从 TypeScript 模块中一次导入多个类,如下所示:

import * as Registration from 'app/models/registration.model'; 

【问题讨论】:

    标签: angular typescript


    【解决方案1】:

    这不是它的工作方式。为了在应用程序的其他部分中使用 Event 模型类,您需要在每个部分中导入它。是否使用 NgModule 无关紧要。

    NgModule 被 Angular compiler 使用,但在它进入该步骤之前,TypeScript 编译器需要处理您的代码。

    在您想要使用它的每个文件中,您都需要导入它,就像您在模块中所做的那样(可能每种情况下的路径可能不同):

    import { Event } from './registration.model';
    

    否则 TypeScript 将不知道 Event 是什么以及从哪里获取它。

    【讨论】:

    • 感谢您的详细回复。
    【解决方案2】:

    错误本身说找不到名称事件

    问题在于您的相对路径。相对路径不正确


    仅供参考:

    declarations metadata property 中无需提及 Event class。当一个类必须用 Angular context 做某事时,你应该在 declaration array 中提到一些东西,这意味着当类用 @ 定义时987654325@

    由于您使用的是纯 Typescript 类,只需在 registration.service.ts

    中导入 Event

    registration.service.ts

    import { Event } from './registration.model or correct relative path';
    
    getEvents(): Observable<Event[]> {   // Now Event[] is declared and will not issue any error.
    
      return this.http.get(`api/events`)
        .map(response => response.json());
    
    }
    

    【讨论】:

    • 请看我问题的最后几行,我知道我可以将它直接导入到服务中。但这并没有回答我的问题。
    • 好的。那么看来你的相对路径有问题。相对路径不正确。
    • 我 100% 肯定模块和服务都在同一个目录中,否则当我添加导入时服务将无法工作。 VS Code 在模块中的导入语句也没有显示任何错误。
    • @micronyks 是正确的,可能问题出在其他地方。
    • 将其添加到声明中对代码的工作方式的影响为零,因此我当然已将其删除。 @asmmahmud 我没有问题,我正在寻找一种更有效的方式来导入类定义。
    猜你喜欢
    • 1970-01-01
    • 2017-02-22
    • 1970-01-01
    • 2019-02-05
    • 1970-01-01
    • 2019-01-04
    • 1970-01-01
    • 2017-05-04
    • 2018-03-08
    相关资源
    最近更新 更多