typescriptinterfaceextending

About using interfaces


would you please help me in using the interfaces? Here is m code:

export interface WidgetAccess {
widgets: BaseWidget[];
iswAValid: boolean;
}

export interface BaseWidget {
readonly extension: WidgetExtension;
isValid?:boolean;
areaId?: number;
}

export enum WidgetExtension {
Score = 'score',
Ranking = 'ranking'
}

export interface RankingWidgetAttributes {
rankingType?: RankingType;
demographicType?: RankingDemographicType;
demographicId?: number;
topicId?: number;
}

export interface RankingWidget extends BaseWidget {
extensionAttributes: RankingWidgetAttributes
}

if (dashboardConfiguration.widgets.filter(w=>{
        w.iswAValid =true;
        if(w.widgets.filter((wid)=>{
                wid.isValid = true;
                if(wid.extension === WidgetExtension.Score){
                                      if(wid.extension === WidgetExtension.Ranking){
                    if(this.IsInvalidValidRankingWidget(wid)){
                        wid.isValid = false;
                        return wid;
                    }
                }
        }).length > 0){
          return w;
        }
    }).length >0){
        results.set('widget', false);
        results.set('valid', false);
    }

I am receiving : Argument of type 'BaseWidget' is not assignable to parameter of type 'RankingWidget'. Property 'extensionAttributes' is missing in type 'BaseWidget' but required in type 'RankingWidget' for this.IsInvalidValidRankingWidget(wid), Would you please help me?

IsInvalidValidRankingWidget(widget : RankingWidget): boolean{
        if((widget.areaId === undefined || widget.areaId === null) 
        && (widget.extensionAttributes.topicId === undefined  ||  
        widget.extensionAttributes.topicId === null)
        ){
        return true;
         }
        return false;
 }

Solution

  • So i presume the error is in the method IsInvalidValidRankingWidget. I would rewrite it so

    IsInvalidValidRankingWidget(widget : BaseWidget): boolean{
        const rankingWidget = widget as RankingWidget;
        if((rankingWidget .areaId === undefined || rankingWidget .areaId === null) 
        && (rankingWidget .extensionAttributes.topicId === undefined  ||  
        rankingWidget .extensionAttributes.topicId === null)
        ){
        return true;
         }
        return false;
    }
    

    This should fix the error i hope.