Ошибка при использовании оператора или в типе аргумента функции - PullRequest
0 голосов
/ 19 июня 2020

У меня есть этот интерфейс:

interface SimpleAddCase {
  addedAppointment: AddedAppointment;
  addCb: AddCallback;
}

interface ContinuousAddCase extends SimpleAddCase {
  removedAppointment: AddedAppointment;
  removeCb: RemoveCallback;
}

type AddedAppointmentArgs = SimpleAddCase | ContinuousAddCase;

type AddAppointment = (args: AddedAppointmentArgs) => void;

, но когда я передаю такой экземпляр:

addAppointmentCallbackContinuousCase = ({
    addedAppointment: { day, number, time, id },
    addCb,
    removedAppointment: params,
    removeCb
  }: ContinuousAddCase): void => {
...}

, я использую addAppointmentCallbackContinuousCase как опору для компонента реакции.

<AppointmentPicker
          addAppointmentCallback={this.addAppointmentCallbackContinuousCase}
        />

И назначьте эту функцию этой опоре, выдайте мне эту ошибку:

Type '({ addedAppointment: { day, number, time, id }, addCb, removedAppointment: params, removeCb }: ContinuousAddCase) => void' is not assignable to type 'AddAppointment'.
  Types of parameters '__0' and 'args' are incompatible.
    Type 'AddedAppointmentArgs' is not assignable to type 'ContinuousAddCase'.
      Type 'SimpleAddCase' is missing the following properties from type 'ContinuousAddCase': removedAppointment, removeCbts(2322)

Кто-нибудь знает, как ее можно решить?

1 Ответ

0 голосов
/ 28 июня 2020

Наконец, я мог решить эту проблему, используя эту форму:

    interface SimpleAddCaseInterface {
      addedAppointment: AddedAppointmentInterface;
      addCb: AddCallbackType;
    }
    
    interface ContinuousAddCaseInterface extends SimpleAddCaseInterface {
      removedAppointment: AddedAppointmentInterface;
      removeCb: RemoveCallbackType;
    }
    
    type AddAppointmentType = (
      args: ContinuousAddCaseInterface | SimpleAddCaseInterface
    ) => void;

, и я мог бы создать его, используя:

interface SimpleAddCaseInterface {
  addedAppointment: AddedAppointmentInterface;
  addCb: AddCallbackType;
}

interface ContinuousAddCaseInterface extends SimpleAddCaseInterface {
  removedAppointment?: AddedAppointmentInterface;
  removeCb?: RemoveCallbackType;
}

//Into a class

addAppointmentCallbackContinuousCase = ({
    addedAppointment: { day, number, time, id },
    addCb,
    removedAppointment: params,
    removeCb
  }: ContinuousAddCaseInterface): void => {...}


<AppointmentPicker
          addAppointmentCallback={this.addAppointmentCallbackContinuousCase}
        />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...