Машинопись ES6 импортирует все экспортируемые константы в виде массива - PullRequest
0 голосов
/ 26 апреля 2020

Я пытаюсь экспортировать много констант, которые потом смогу импортировать и отобразить как массив. Я не могу поместить их все в один объект и экспортировать их, потому что я использую дженерики (OptionInterface) и я могу sh сохранить проверки типов.

В настоящее время я экспортирую каждый объект как именованный экспортировать, а затем экспортировать все как массив. Проблема в том, что другой разработчик может не знать, что он должен добавить новый элемент в экспортируемый массив.

Пример:

//ElemSettings.tsx
export interface ElemProps<OptionInterface = any> {
  title: string,
  key: string,
  options: OptionsInterface[] 

export interface SpecialOption {
 s1: string,
 s2: number
}


//Elements.tsx - what I wish to export
export const elemOne: ElemProps {
  title: 'element One',
  key: elemOne'
  options: [1,2,3]
}

export const elemTwo: ElemProps {
  title: 'element Two',
  key: elemTwo'
  options: [1,2,3]
}

export const elemThree: ElemProps<SpecialOption> {
  title: 'element Two',
  key: elemTwo'
  options: [{s1:'one',s2:1},{s1:'two',s2:2}]
}

//This is how I export now
export const elems: Array<ElemProps> =
  [elemOne, elemTwo, elemThree]



//user.tsx
import { elems } from 'Elements';

const doSomething = () => { 
      elems.map(...)
}

Если я пытаюсь удалить экспортированный массив и просто импортировать все элементы, например:

import * as elems from 'Elements';

, а затем использовать его как в doSomething, я получаю сообщение об ошибке:

Property 'map' does not exist on type 'typeof import("Elements")'.

Любые идеи, как я могу добиться экспорта всех констант в виде массива, но сохранить а также печатать?

1 Ответ

1 голос
/ 26 апреля 2020

import * as elems, вероятно, даст вам такой объект:

{
    "elemOne": ...
    "elemTwo": ...
    ...
}

Попробуйте использовать Object.values, чтобы получить массив с экспортированными значениями:

import * as elems from 'Elements';

const doSomething = () => { 
  Object.values(elems).map(...)
}
...