类型上不存在属性推送

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] 

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

【讨论】:

以上是关于类型上不存在属性推送的主要内容,如果未能解决你的问题,请参考以下文章

类型“typeof ...”上不存在属性“use”,类型“typeof”上不存在属性“extend”

TypeScript:类型“”上不存在属性

错误 TS2339:类型“”上不存在属性“包含”

类型“”上不存在属性“forEach”

类型“”上不存在 Typescript 错误属性“成员”

类型“T”上不存在属性 - 一般问题