类型不存在属性问题

时间:2019-04-02 12:40:56

标签: angular typescript

在编译时出现错误,显示即使从调用中调用,类从类调用时也没有属性。

这是课程:

    export declare class MessageService {
    private messageSource;
    private clearSource;
    messageObserver: import("rxjs/internal/Observable").Observable<Message | Message[]>;
    clearObserver: import("rxjs/internal/Observable").Observable<string>;
   public  add(message: Message): void;
   public addAll(messages: Message[]): void;
    clear(key?: string): void;
}

这就是我从组件中调用它的地方:

showSuccess(details) {
    this.messageService.add({ severity: 'success', life: 5000, summary: 'Success Message', detail: details });        
}

带有警告。

ERROR in C:/Users/..../webapp/app/entities/asset/asset-update.component.ts(555,29):
TS2339: Property 'add' does not exist on type 'MessageService'.

这是messageService.js:

"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
    return c > 3 && r && Object.defineProperty(target, key, r), r;
};
Object.defineProperty(exports, "__esModule", { value: true });
var core_1 = require("@angular/core");
var rxjs_1 = require("rxjs");
var MessageService = /** @class */ (function () {
    function MessageService() {
        this.messageSource = new rxjs_1.Subject();
        this.clearSource = new rxjs_1.Subject();
        this.messageObserver = this.messageSource.asObservable();
        this.clearObserver = this.clearSource.asObservable();
    }
    MessageService.prototype.add = function (message) {
        if (message) {
            this.messageSource.next(message);
        }
    };
    MessageService.prototype.addAll = function (messages) {
        if (messages && messages.length) {
            this.messageSource.next(messages);
        }
    };
    MessageService.prototype.clear = function (key) {
        this.clearSource.next(key || null);
    };
    MessageService = __decorate([
        core_1.Injectable()
    ], MessageService);
    return MessageService;
}());
exports.MessageService = MessageService;
//# sourceMappingURL=messageservice.js.map

1 个答案:

答案 0 :(得分:0)

如果这是常规类,那么您需要像这样实例化它:

public messageService: MessageService = new MessageService();

如果这是用@Injcetable()装饰的服务,则需要将该服务注册到模块,并通过在组件的构造函数中提供它来使用它,如下所示:

constructor(private messageService: MessageService) {...}

,然后将显示所有公共类的属性。

编辑: 也许您应该在MessageService类中实现add方法的实现。现在看起来就像这样:

public  add(message: Message): void;

相反,您应该尝试:

public add(message: Message): void {
    // do something with you message like this...
    this.messages.push(message);
}