انگولار ۶ با تایپاسکریپت ساده - خطا: ماژول عضو صادراتی ندارد
من یک کتابخانه کوچک Angular 6 دارم که در آن در حال ساخت یک کامپوننت قابل استفاده مجدد برای نمایش پیامهای سطح صفحه هستم، مانند خطا، اطلاعات، هشدار و موفقیت.
برای این منظور یک enum به نام 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.tsimport { 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'
چه کاری اشتباه انجام میدهم؟ اگر type را در ServerMessage به رشته تغییر دهم و ServerMessageType enum را کاملاً حذف کنم، همه چیز به درستی ساخته و مستقر میشود.
متشکرم!
پاسخ شماره ۱
شما نیاز دارید کامپوننت خود را در ماژول ریشه وارد کنید و وقتی سرویسی میسازید، آن را @Injectable کنید و سپس استفاده نمایید.
پاسخ شماره ۲
اگر میخواهید یک کامپوننت را با ایمپورت کردن آن ماژول ایمپورت کنید، باید آن کامپوننت را بهطور صریح از ماژول صادر کنید.
کدی که باید این مسئله را در آن حل کنید، کد ماژول است که از آن میخواهید آن کامپوننت را صادر کنید.