Javascript терпит неудачу, когда требуется модуль в функции - PullRequest
1 голос
/ 20 марта 2020

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

import moment, { Moment } from 'moment';

const springThemeStyles = require('../../../styles/spring.theme.scss');

interface Theme {
  theme: string;
  endDate: Date;
  startDate: Date;
  siteCode: string;
  costCenter: string;
  bannerImage: string;
  cssOverride: string;
}

const validateDate = (date: string): Moment => {
  return moment(`${moment().year()}/${date}`);
};

export const themes: Theme[] = [{
  siteCode: '',
  costCenter: '',
  theme: 'spring',
  bannerImage: 'spring.jpg',
  endDate: moment(validateDate('6/19')).toDate(),
  startDate: moment(validateDate('3/20')).toDate(),
  cssOverride: springThemeStyles
}];

export const getActiveTheme = (): any => {
  const now = moment().toDate();

  return themes.map((t: Theme) => {
    if (t.startDate >= now || t.endDate <= now) {
      // return t.cssOverride; THIS DOESN'T WORK

      return require('../../../styles/spring.theme.scss') // THIS WORKS
    }
  });
};

Таким образом, закомментированная строка // return t.cssOverride; THIS DOESN'T WORK на самом деле, как мне нужно, чтобы она работала, чтобы она была динамичной c.

Еще одна вещь, которую я заметил, это что если я верну t.cssOverride;, тогда TS жаловается именно на эту строку return themes.map((t: Theme) он говорит Not all code paths return a value.ts(7030).

Дело в том, что мне нужно, чтобы это работало так:

    if (t.startDate >= now || t.endDate <= now) {
      return t.cssOverride; // THIS DOESN'T WORK     
    }

Так что я могу сделать это динамически c. Я предполагаю, что массив themes будет расти, и мне не нужно прилагать слишком много усилий для поддержки этого фрагмента кода.

Так что, есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...