Typescript преобразовать тип, описанный интерфейсом в другой? - PullRequest
0 голосов
/ 25 июня 2019

Я знаю, что типы существуют по причине.

Но мои коллеги хотели бы скрыть дырявую абстракцию, которая есть у меня в одном из моих компонентов. Я использую большой интерфейс конфигурации для хранения всей информации, необходимой моему основному компоненту, и одно из свойств - это массив или списковые элементы, которые образуют множественный выбор. В основном мой массив имеет такой тип:

export interface Column {
  label: string;
  property: string;
}

Но мы используем сторонний компонент multiselect , который принимает в качестве параметров только свой собственный типизированный массив. Как:

export interface IMultiSelectOption {
  id: any;
  name: string;
  disabled?: boolean;
  isLabel?: boolean;
  parentId?: any;
  params?: any;
  classes?: string;
  image?: string;
}

В нашем случае id -> property и name -> label. Но! Для того чтобы опция выбора работала, она должна иметь эти пары ключ-значение для работы.

Как я могу преобразовать наш собственный тип в тип ожидаемого мультиселекта для работы? Я не могу просто сделать еще один список типа IMultiselectOption b / c, который бы не решил проблему с утечкой абстракции. Я не могу преобразовать его в свой принимающий компонент, где происходит вся магия (в основном это занавес, который скрывает всю магию) б / к типа Column[] реквизит не существует для типа IMultiselectOption[]

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

Проблема решается путем встраивания стороннего компонента в другой вспомогательный компонент.Таким образом, я смог манипулировать данными и настраивать их по мере необходимости.Благодаря @Eliseo эта идея стала победителем.

Ничего особенного.Компонент с 3 входами и 1 выходом, который генерирует изменения и затем прослушивает их в потребляющем компоненте.

0 голосов
/ 25 июня 2019

В моем случае мне также пришлось использовать несколько типов для одних и тех же данных, но они были представлены / организованы по-разному для внешнего и внутреннего использования.

У меня просто есть преобразование вспомогательной службы, где я конвертирую свой объект следующим образом:

ColumnToIMultiSelectOption(column: Column): IMultiSelectOption {
   return <IMultiSelectOption>{
      id: column.property,
      name: column.label,
   }
}
...