Чтобы узнать больше о дженериках в TypeScript, я пытаюсь создать универсальный магазин Redux.Мой магазин поддерживает как минимум три операции: SET, UPDATE и DELETE.Каждая операция принимает разные параметры.
Далее, я хотел бы также сделать общие операции, поддерживаемые магазином.
Я сделал два примера. Первый пример , который не использует универсальный тип для Action.Он выводит типы, как я и ожидал.
Однако во втором моем примере , где я сделал тип действия универсальным, TypeScript не распознает атрибуты, которые не являются общими для каждого действия.в то время как атрибуты, которые являются общими для всех действий, распознаются.
Я объявляю общие параметры для своего хранилища следующим образом:
class Store<
CONTEXT extends StoreContext,
ACTION extends Action<CONTEXT> = Action<CONTEXT>
>
И вот как я объявляю мой редуктор:
Выводит типы правильно
reduce(state: CONTEXT, action: Action<CONTEXT>): CONTEXT { }
Не выводит типы правильно:
reduce(state: CONTEXT, action: ACTION): CONTEXT { }
Я предполагаю, что это не такправильный способ объявить мой универсальный тип.Как правильно объявить мой универсальный тип так, чтобы мои типы действий выводились правильно?