Проблема в условных типах в TypeScript - PullRequest
0 голосов
/ 23 декабря 2019

У меня есть два интерфейса в моем коде, и я хочу выбрать один тип между этими двумя.

Вот код для интерфейсов:

interface createUserToSiteMutateUseStates {
  setStateId: (value: React.SetStateAction<string | null | undefined>) => void;
  StateId: string | null | undefined;
  setCityId: (value: React.SetStateAction<string | null | undefined>) => void;
}

interface updateStoreSpatialCommitmentsVariablesUseState {
  setStateSelected: (
    value: React.SetStateAction<SelectorOptions[] | undefined | null>
  ) => void;
}

Я создал тип для распознаванияистинного интерфейса:

type whichType<T> = T extends "createUserToSiteMutate"
  ? createUserToSiteMutateUseStates
  : T extends "updateStoreSpatialCommitmentsVariables"
  ? updateStoreSpatialCommitmentsVariablesUseState
  : null;

И, наконец, я использовал whichType:

export interface Props {
  type:
    | "createUserToSiteMutate"
    | "createUnitVariables"
    | "updateStoreSpatialCommitmentsVariables";
  useStateProps?: whichType<type>;
}

Но когда я использую Props, я получаю эту ошибку:

const handleChange = (option: SelectorOptions) => {
      switch (type) {
        case "createUserToSiteMutate":
          useStateProps!.setCityId && useStateProps!.setCityId(null);
          useStateProps!.setUniversityId &&
            useStateProps!.setUniversityId(null);
          useStateProps!.setOrganizationId &&
            useStateProps!.setOrganizationId(null);
          useStateProps!.setUnitId && useStateProps!.setUnitId(null);
          useStateProps!.setStateId && useStateProps!.setStateId(option.value);
        default:
          break;
      }
    };

Свойство 'setCityId' не существует для типа 'createUserToSiteMutateUseStates |updateStoreSpatialCommitmentsVariablesUseState '.

Свойство' setCityId 'не существует для типа' updateStoreSpatialCommitmentsVariablesUseState'.ts (2339)

Как исправить эту ошибку? Проблема в whichType?

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