扩展打字稿中的接口/类型

时间:2020-03-28 13:23:31

标签: javascript angular typescript

我已经扩展了FilterMetaData类型,以添加一个动态模型,该模型对于不同的实体而言是不同的结构,但是某种程度上打字稿无法识别我的对象属性。我可能在这里错过了一些东西。

界面

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

使用args类型调用函数,如下所示:-

this.helper<FilterMetaData<Select>>(filter);

0 个答案:

没有答案