Расширение интерфейса / типов в машинописи - PullRequest
2 голосов
/ 28 марта 2020

Я расширил свой тип FilterMetaData, добавив динамическую c модель, которая имеет различную структуру для разных объектов, но почему-то машинопись не распознает свойства моего объекта. Я мог бы что-то здесь упустить.

Интерфейсы

 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;
    }

Реализация в классе

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);
      })
  }

Вызов функции с аргументами типа: -

this.helper<FilterMetaData<Select>>(filter);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...