Я пытаюсь динамически запрашивать модуль и у меня ничего не получается. Если мне требуется модуль из переменной или из ключа объекта, он не работает, если я делаю это напрямую, он работает. Это модуль 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
будет расти, и мне не нужно прилагать слишком много усилий для поддержки этого фрагмента кода.
Так что, есть идеи?