type ListThemes =
| "projects"
| "data"
| "alerts"
| "jobs";
type ListDataType = {
projects: ProjectListFieldsTypeMap;
data: DataListFieldsTypeMap;
alerts: AlertsListFieldsTypeMap;
jobs: JobListFieldsTypeMap;
};
type ListProps = {
theme: ListThemes;
data: DERIVED_TYPE_HERE;
};
DERIVED_TYPE_HERE
будет значением ListDataType[theme]
Предпринимали попытки более непосредственно связать ListThemes
с ключами в ListDataType
, но не смогли этого сделать и все же напрямую создать отношение 1:1.
И чему должен соответствовать "entities"
?
Предоставьте минимальный воспроизводимый пример, который четко демонстрирует проблему, с которой вы столкнулись. В идеале кто-то может вставить код в автономную IDE, такую как Площадка TypeScript (ссылка здесь!), и сразу же приступить к решению проблемы, не создавая ее заново. Таким образом, не должно быть псевдокода, опечаток, несвязанных ошибок или необъявленных типов или значений.
что-то вроде этого с дженериками может достичь вашей цели, когда я это читаю:
type ListProps<T extends ListThemes> = {
theme: T;
data: ListDataType[T];
};
и вы также можете сжать его и избавиться от типа ListThemes
, например:
type ListProps<T extends keyof ListDataType> = {
theme: T;
data: ListDataType[T];
};
но это не будет работать с кодом, который вы указали, поскольку GraftListThemes
не определен, поэтому я не уверен, на что он ссылается, и entities
не сопоставляется ни с чем в ListDataType
.
так что в основном вы хотите, если
theme
это"alerts"
, то тип"data"
этоAlertsListFieldsTypeMap
и т. д. и т. д.?