Обобщения TypeScript неправильно определяют тип - PullRequest
0 голосов
/ 15 марта 2019

Чтобы узнать больше о дженериках в 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 { }

Я предполагаю, что это не такправильный способ объявить мой универсальный тип.Как правильно объявить мой универсальный тип так, чтобы мои типы действий выводились правильно?

...