Extending Interface/types in typescript

Viewed 382

I have extended my FilterMetaData type to add a dynamic model which is different structure for different entities but somehow typescript not recognizing my object properties. I might be missing something here.

Interfaces

 export type FilterMetaData<T extends {}> = T & {
      filterCriteriaID: number;
      filterCriteriaName?: string;
      isDefaultSelected?: boolean;
      isExpanded?: boolean;
    }

    export interface DateRange {
      data?: DateRangeData;
    }

    export interface DateRangeData {
      min?: Date;
      max?: Date;
    }

    export interface Range {
      data?: RangeData;
    }

    export interface RangeData {
      currency?: string;
      timePeriod?: string;
      min?: number;
      max?: number;
      step?: number;
    }

    export interface Select {
      data?: SelectData[];
    }

    export interface SelectData {
      id?: number;
      name?: string;
      isSelected?:boolean|false;
      parentID?: number | null;
      parentName?: string;
    }

Implementation in class

helper<T1 extends FilterMetaData<T2>>(filter) {
    this.selectedFilterService.getAppliedFilterMasterData<T1>(filter)
      .pipe(takeUntil(this.unsubscribe$))
      .subscribe((filterData: T1) => {
        if (filter.isDefaultSelected) {
          filterData.isExpanded = false;
          filterData.data.forEach((data) => data.isSelected = false);
          this.selectedFilters.result.select.push(filterData);
          this.loadComponent(new FilterComponentType(SelectComponent, filterData));
        } else {
          this.removeComponent(filter);
        }
      }, err => {
        this.toastrService.error(err);
      })
  }

Invoking Function with type args like this:--

this.helper<FilterMetaData<Select>>(filter);
0 Answers
Related