类型上不存在属性推送
Posted
技术标签:
【中文标题】类型上不存在属性推送【英文标题】:Property push does not exist on type 【发布时间】:2016-09-01 23:44:08 【问题描述】:我正在尝试键入一个数组,其中包含包含函数数组的对象。 TypeScript 给出错误: TS2339: Property 'push' does not exist on type ' name?: (() => void)[]; '。
_observerCallbacks 对象应如下所示:
main: [function1..., function2...],
second: [function1..., function2...]
这就是我的代码的样子。
export class LoadingTracker
private _observerCallbacks: name?: (): void; [] [] = [];
registerObserverCallback(callback, name): void
if (typeof this._observerCallbacks[name] === 'undefined') this._observerCallbacks[name] = [];
this._observerCallbacks[name].push(callback);
notifyObservers(): void
this._observerCallbacks.forEach((callback: (): void; ): void =>
callback();
);
我不知道哪里出错了。
【问题讨论】:
【参考方案1】:考虑使用index signature。我认为你的意思是做这样的事情:
export class LoadingTracker
private _observerCallbacks: [name: string]: (): void; [] = ;
registerObserverCallback(callback, name): void
if (typeof this._observerCallbacks[name] === 'undefined')
this._observerCallbacks[name] = [];
this._observerCallbacks[name].push(callback);
notifyObservers(): void
Object.keys(this._observerCallbacks).forEach(name =>
this.notifyObserversByName(name);
);
private notifyObserversByName(name: string)
this._observerCallbacks[name].forEach(callback =>
callback();
);
【讨论】:
【参考方案2】:看起来这只是一个类型错误。你的 _observerCallbacks 应该有这个类型:
private _obeservableCallbacks: name: [(): void]
这是一个将字符串映射到函数列表的字典。
【讨论】:
以上是关于类型上不存在属性推送的主要内容,如果未能解决你的问题,请参考以下文章