带有普通 TypeScript 的 Angular 6 - 错误:模块没有导出的成员

Posted

技术标签:

【中文标题】带有普通 TypeScript 的 Angular 6 - 错误:模块没有导出的成员【英文标题】:Angular 6 with plain TypeScript - ERROR: module has no exported member 【发布时间】:2018-11-11 20:23:20 【问题描述】:

我有一个小型 Angular 6 库,我正在其中构建一个可重用的组件来显示页面级消息,例如错误、信息、警告和成功。

为此我有一个枚举ServerMessageType.ts,这很简单:

export enum ServerMessageType 
    Error = 'error',
    Info = 'info',
    Success = 'success',
    Warning = 'warning'

ServerMessage.ts 应该使用ServerMessageType

import  ServerMessageType  from './ServerMessageType';

export class ServerMessage 
    constructor(public type: ServerMessageType, 
                public messageText: string, 
                public dismissible?: boolean, 
                public id?: string) 
    

server-messages.component.ts

import  Component, EventEmitter, Input, Output  from '@angular/core';

import  ServerMessage  from './ServerMessage';
import  ServerMessageType  from './ServerMessageType';

    @Component(
  selector: 'app-server-messages',
  templateUrl: './server-messages.component.html',
  styleUrls: []
)
export class ServerMessagesComponent 

  @Input() messages: ServerMessage[];
  @Output() messageRemoved = new EventEmitter<ServerMessage>();

  constructor() 
  

  clearMessage = function (index: number) 
    const message = this.messages[ index ];

    this.messageRemoved.emit(message);
    this.messages.splice(index, 1);
  ;

  getMessageClass(message: ServerMessage): string 
    switch (message.type) 
      case ServerMessageType.Error:
        return 'alert-danger';
      case ServerMessageType.Info:
        return 'alert-info';
      case ServerMessageType.Success:
        return 'alert-success';
      case ServerMessageType.Warning:
        return 'alert-warning';
    
  

  isDismissible(message: ServerMessage): boolean 
    return message.dismissible === true;
  

但是,当我运行 ng build 时,我得到一个错误:

BUILD ERROR  
> projects/framework/src/lib/server-messages/server-messages.component.ts(3,28):
> error TS2305: Module
> '"/Users/xxx/dev/apps/framework/projects/framework/src/lib/server-messages/ServerMessage"'
> has no exported member 'ServerMessageType'

我做错了什么?如果我将ServerMessage 中的type 更改为字符串并完全删除ServerMessageType 枚举,则构建和部署一切都很好。

谢谢!

【问题讨论】:

请查看server-messages.component.ts。你有错误的导入语句。 你没有分享你的messages.component.ts... 你分享了'ServerMessageComponent.ts' ....这是你在***上的错误吗? Angular 2 : export component on a module and import and use it inside a module的可能重复 不。它不是重复的。它与 Angular 组件或模块无关。她只是在使用枚举 - 语言功能。 这真是令人困惑。你能告诉我projects/framework/src/lib/server-messages/@IsabellePlante 中的所有文件名吗 【参考方案1】:

你需要在你的根模块中导入你的组件,并且当你制作服务而不是让它@Injectable而不是使用。

【讨论】:

【参考方案2】:

如果您想通过导入该模块来导入该组件,则需要从该模块中显式导出该组件。

您必须解决此问题的代码是您要从中导出该组件的模块代码。

【讨论】:

谢谢!你能用例子更好地解释一下吗?我不认为我跟随。 这里解释:***.com/questions/41960959/…【参考方案3】:

愚蠢的错误!

server-messages.component.ts中,这两行:

import  ServerMessage  from './ServerMessage';
import  ServerMessageType  from './ServerMessageType';

已恢复为

import  ServerMessage, ServerMessageType  from './ServerMessage';

感谢您的帮助!它在 ServerMessage.ts 中找不到 ServerMessageType,因为它是在 ServerMessageType.ts...

中导出的

感谢大家的帮助!

【讨论】:

以上是关于带有普通 TypeScript 的 Angular 6 - 错误:模块没有导出的成员的主要内容,如果未能解决你的问题,请参考以下文章

带有 TypeScript 的 Angular 4:通过引用传递参数

带有 Ionic 2 Angular 2 和 TypeScript 的 OpenPGP

导入的类不能在带有 TypeScript 的 Angular.js 中用作服务

Typescript 编译器错误预期带有 Angular 1.5 组件的分号

如何在 TypeScript Angular 2 中将 Json 对象数组映射到另一个普通 json 对象

带有 TypeScript 错误的 Angular HTTP GET http.get(...).map 不是 [null] 中的函数