Я не знаю, как объяснить, что я имею в виду, но вот что у меня есть:
enum ContactBaseType {
Email,
Notification
}
interface ContactBase {
[ContactBaseType.Email]: EmailType[];
[ContactBaseType.Notification]: NotificationType[];
}
Что я хочу сделать:
function ToggleSubscription(lookup: ContactBase, type: ContactBaseType, enumType: EmailType | NotificationType) {
// something like this, however this gives me a "EmailType | NotificationType is not assignable to never"
const index = lookup[type].indexOf(enumType);
}
Я пробовал несколько разных решений, и ни одно из них, похоже, не работает, поэтому я думаю, что что-то упускаю. Я пробовал использовать такие карты:
type ContactBaseFlags = ContactBaseType.Email | ContactBaseType.Notification;
type ContactBaseMap = { [K in ContactBaseFlags]: K extends ContactBaseType.Email ? EmailType[] : NotificationType[] };
// or
type ContactBaseMap: { [K in ContactBaseFlags]: EmailType[] | NotificationType[] }
Я пробовал извлечь ключ с помощью keyof, et c.