Я работаю с библиотекой React Google Login в TypeScript. У него есть привязки типов для TypeScript, но все примеры приведены в JavaScript, и я довольно новичок в TypeScript.
Код установки выглядит следующим образом:
<GoogleLogin
clientId="client-id-value"
onSuccess={successResponseGoogle}
onFailure={failureResponseGoogle}
cookiePolicy={'single_host_origin'}
/>
В TypeScript, подпись для обратного вызова onSuccess:
readonly onSuccess: (response: GoogleLoginResponse | GoogleLoginResponseOffline) => void
Тип GoogleLoginResponseOffline
имеет только одно свойство, code
, где GoogleLoginResponse
имеет диапазон свойств для доступа к данным аутентифицированного пользователя.
Проблема, с которой я столкнулся, заключается в том, что TypeScript не позволяет мне получить доступ к каким-либо свойствам GoogleLoginResponse в параметре response, например,
«Property» getBasicProfile 'не существует для типа GoogleLoginResponseOffline' '
Я пробовал следующее для приведения или проверки типа параметра, но все выдают ошибки того или иного типа. Моя функция выглядит следующим образом:
const responseGoogleSuccess = (response: GoogleLoginResponse|GoogleLoginResponseOffline) => {
// Tried to check for property to identify type
if(response.googleId){ // Property 'googleId' does not exist on type 'GoogleLoginResponseOffline'
const profile = response.getBasicProfile(); // Property 'getBasicProfile' does not exist on type 'GoogleLoginResponseOffline'
}
// Tried to cast like this
const typedResponse = <GoogleLoginResponse>response;
// Tried to check type
if(response instanceof GoogleLoginResponse){ // 'GoogleLoginResponse' only refers to a type, but is being used as a value here.
}
}
Из документации TypeScript выглядит так, как будто if(response instanceof GoogleLoginResponse)
близок, в этом случае происходит сбой, потому что GoogleLoginResponse
- это интерфейс, и ему нужно быть классом.
Пожалуйста, скажите мне, как это делается! Я просмотрел множество вопросов StackOverflow с похожими заголовками, но ни один из них не охватывает это.