【问题标题】: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();
            });
        }
}

我不知道哪里出错了。

【问题讨论】:

    标签: typescript


    【解决方案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] }
      

      这是一个将字符串映射到函数列表的字典。

      【讨论】:

        猜你喜欢
        • 2019-02-24
        • 1970-01-01
        • 2018-12-11
        • 2021-01-09
        • 2021-07-10
        • 2017-07-22
        • 2023-03-26
        • 2023-04-02
        相关资源
        最近更新 更多