Тип объекта в Typescript - PullRequest
       3

Тип объекта в Typescript

0 голосов
/ 04 апреля 2020

Я запускаю мутацию graphql и в зависимости от того, что пользователь вводит в интерфейс, я передаю различные переменные в мутации graphql с использованием объекта input.

const [updateUser] = useMutation<UpdateUserReponse>(UPDATE_USER);

  let submitForm = (
    email: string,
    firstName: string,
    lastName: string,
    newEmail: string,
    phoneNumber: string,
  ) => {
    setIsSubmitted(true);

    if (email && (firstName || lastName || newEmail || phoneNumber)) {
      const input: any= {};
      if (firstName !== '') {
        input.firstName = firstName;
      }
      if (lastName !== '') {
        input.lastName = lastName;
      }
      if (newEmail !== '') {
        input.email = newEmail;
      }
      if (phoneNumber !== '') {
        input.phoneNumber = phoneNumber;
      }
      updateUser({
        variables: {
          email: email,
          input: input,
        },
      })

Однако я не Я не хочу использовать input: any и хочу быть более точным c. Как правило, это тип ввода, который я использую в самой мутации:

interface UpdateUserInput {
  email: String;
  firstName: String;
  lastName: String;
  phoneNumber: String;
}

Я пытался использовать это вместо any, но это не работает. Я также пытался использовать object, но затем я получаю ошибки, такие как:

Property 'firstName' does not exist on type 'object'.ts(2339)

1 Ответ

1 голос
/ 05 апреля 2020

Если в зависимости от входных данных данные могут существовать или нет, вы можете просто сделать их необязательным свойством в интерфейсе. Таким образом, вы все равно получите все значения, но если свойство не существует, оно не выдаст ошибку.

Итак,

interface UpdateUserInput {
  email: String;
  firstName?: String;
  lastName?: String;
  phoneNumber?: String;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...