Мне нужно создать объект, содержащий разные методы.
Каждый метод может иметь различную полезную нагрузку.
Поэтому я хочу добавить безопасность типа.
Вопрос
Есть ли способ указать, что каждый метод может иметь различный тип полезной нагрузки?
Состояние как есть
Действие набирается следующим образом:
export type Action<TPayload> = (payload?: TPayload) => TPayload;
Тогда мне нужно создать словарь этих методов.
В следующем примере кода вводится ошибка .
export interface Actions<TPayload> {
// ^--- TypeScript should get to know that TPayload is different for each action
[key: string]: Action<TPayload>;
}
Следующий фрагмент кода показывает, что эти наборы приводят к потере всей информации созданного словаря.
class Customer {}
class Product {}
const actions: Actions<Customer|Product> = {
addCustomer: (payload: Customer) => ({}),
addProduct: (payload: Product) => ({}),
};
У объекта actions
нет методов.
Моя цель
Я хочу получить что-то вроде этого:
Заранее спасибо за любые отзывы или предложения по этому вопросу.
Фон
Я хочу сохранить эту информацию о типизации, поскольку позже я хочу использовать универсальную фабричную функцию, которая преобразует этот тип словаря методов.