Как я могу защитить одно свойство, чтобы однозначно идентифицировать другие свойства - PullRequest
0 голосов
/ 16 февраля 2019

Ситуация следующая: я хочу, чтобы функция вызывалась двумя разными способами.Тип аргумента функции выглядит следующим образом:

type Argument<State, Action> = {
  reducer: (
    state: Exclude<State, undefined> | undefined,
    action: Exclude(Action, undefined),
  ) => Exclude<State, undefined>;
} & (
  | {
      initialState: Exclude<State, undefined>;
      initialAction?: Exclude<Action, undefined>;
    }
  | {
      initialState: undefined;
      initialAction: Exclude<Action, undefined>;
    });

Я понимаю из этого, что могу передать в initialState типа State и, опционально, initialAction типа Action или Я могу передать в initialState типа undefined , но затем необходимо передать в initialAction типа Действие .

Я пытаюсь получить реальное начальное состояние с помощью конструкции, аналогичной

const realState = initialAction === undefined
  ? initialState
  : reducer(initialState, initialAction)

, но даже если initialState должен иметь тип State , если initialAction имеет тип undefined , тип realState по-прежнему отображается как State |undefined .

Я что-то упустил или есть другое решение моей проблемы?Я был бы очень благодарен за любую помощь в этом вопросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...