Как написать проверку ответа мутации - PullRequest
0 голосов
/ 03 апреля 2020

Я использую мутацию graphql следующим образом:

interface SignInReponse {
  loginEmail : {
    accessToken: string;
  }
}
const [login] = useMutation<SignInReponse>(LOGIN);

Вот так выглядит мутация в схеме:

loginEmail(
  email: String!
  password: String!
): SignInResponse!
type SignInResponse {
  accessToken: String!
}

Теперь вход в систему и все работает хорошо, но я чувствую, что interface SignInResponse на самом деле ничего не делает. Например, я попытался заменить свой SignInResponse следующим:

interface SignInReponse {
  users: {
   nodes: {
    id: string;
    firstHelloName:number;
    lastName: string;
    phoneNumber: string;
    email: string;
   }[]
  }
}

Ясно неверный. Но вход в систему все еще успешен, и ошибки не отображаются. Так в чем же смысл?

Редактировать: Так вот, как я использую мутацию:


const [login] = useMutation<SignInReponse>(LOGIN);

  let submitForm = (email: string, password: string) => {
    setIsSubmitted(true);
    login({
      variables: {
        email: email,
        password: password,
      },
    })
      .then(({ data }: ExecutionResult<SignInReponse>) => {
        dispatch({ type: "login", payload: data.loginEmail.accessToken })  
      })

До ExecutionResult<SignInReponse> я просто использовал any. Однако теперь, когда я изменил тип, он выдает ошибку на data с data.loginEmail.accessToken:

var data: SignInReponse | null | undefined
Object is possibly 'null' or 'undefined'.ts(2533)

1 Ответ

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

Добавление типов в ваш код не повлияет на его выполнение. TypeScript должен быть скомпилирован в JavaScript для выполнения, после чего любая информация о типе все равно удаляется из вашего кода.

«Точка» предоставления типа для ответа на ваш useMutation крючок указывает на форму ответа, возвращаемого мутацией. Когда вы выполните мутацию, вы сделаете что-то вроде:

const { data } = await login()

. Предоставляя тип ответа, типом для data будет этот тип вместо any. Если вы попытаетесь получить доступ к свойству data, которое не определено типом, компилятор TypeScript выдаст ошибку (и в зависимости от редактора вы также увидите ошибку в вашем редакторе).

...