Angular2:提供的参数与调用目标的任何签名都不匹配

时间:2016-12-23 07:36:45

标签: angular typescript compiler-errors observable

我创建了自己的Observable服务

import { Injectable, EventEmitter, Output} from '@angular/core';

@Injectable()
export class ObservableService {
    data = [];
    @Output eventEmitter:EventEmitter = new EventEmitter();

    setSharedData(key, value) {
        this.data[key] = value;
        this.eventEmitter.emit(this.data);
    }

    getSharedData() {
        return this.data;
    }
}

这是一个用法示例

ngOnInit() {
        this._observable.eventEmitter.subscribe((data) => {
            console.log(data);
        })
    }

目前正在编译时说

app/services/data-observable.service.ts(6,5): error TS1240: Unable to resolve signature of property decorator when called as an expression.
  Supplied parameters do not match any signature of call target.

这是指这个特定的字符串,

@Output eventEmitter:EventEmitter = new EventEmitter();

但服务工作完美,任何建议有什么不对?

1 个答案:

答案 0 :(得分:5)

Output()之后您缺少括号。虽然服务中不需要Output()。这仅在组件或指令中是必需的,因为您可以在模板中使用(eventEmitter)="onEventEmit($event)"表示法。

另一方面,您缺少通用EventEmitter<T>的类型注释:

eventEmitter: EventEmitter<any> = new EventEmitter();

eventEmitter: EventEmitter<boolean> = new EventEmitter<boolean>();

除此之外,EventEmitters只应在@Component内使用。如果您需要类似功能,请使用Subject中的rxjs

subject: Subject<boolean> = new Subject<boolean>();