Reactjs Typescript函数参数有两种类型,其中一种类型的属性可以';无法访问,因为它不是其他类型的属性
我有这个部分:Reactjs Typescript函数参数有两种类型,其中一种类型的属性可以';无法访问,因为它不是其他类型的属性,reactjs,typescript,Reactjs,Typescript,我有这个部分: <GoogleLogin clientId={googleAppId} onSuccess={responseGoogle} onFailure={responseGoogle} isSignedIn={true} cookiePolicy={"single_host_origin"} autoLoad={false} icon={true} /> 我只想使用类型响应:GoogleLoginResponse,但如果这样
<GoogleLogin
clientId={googleAppId}
onSuccess={responseGoogle}
onFailure={responseGoogle}
isSignedIn={true}
cookiePolicy={"single_host_origin"}
autoLoad={false}
icon={true}
/>
我只想使用类型响应:GoogleLoginResponse
,但如果这样做,我会从库中得到以下错误:
Type '(response: GoogleLoginResponse) => void' is not assignable to type '(response: GoogleLoginResponse | GoogleLoginResponseOffline) => void'
所以我使用response:GoogleLoginResponse | GoogleLoginResponseOffline
作为参数
问题是,当我尝试访问类型为GoogleLoginResponse
的属性accessToken
时,我得到以下错误,因为accessToken
不是GoogleLoginResponseOffline
的属性:
Property 'accessToken' does not exist on type 'GoogleLoginResponse | GoogleLoginResponseOffline'.
Property 'accessToken' does not exist on type 'GoogleLoginResponseOffline'.
如何访问response
的属性accessToken
注:
- 我正在使用以下反应库:
- 我不使用
,因为这被认为不是一个好的做法response:any
和GoogleLoginResponse
类型定义:GoogleLoginResponseOffline
const responseGoogle = (
response: GoogleLoginResponse | GoogleLoginResponseOffline ): void => {
if ('accessToken' in response ){
console.log(response.accessToken);
}else {
console.log('offline');
}
}
responseGoogle({accessToken:'abc', name: 'Jim'})
responseGoogle({name: 'Joan'})
“我只想用那种类型…”-为什么?如果不是那个呢?您知道这不会发生吗?文档表明您可以使用
accessType=“online”
或accessType=“offline”
prop(默认为“online”)作为GoogleLogin
组件。由于我使用的是accessType=“online”
,因此响应类型将为GoogleLoginResponse
。有关详细信息:。
const responseGoogle = (
response: GoogleLoginResponse | GoogleLoginResponseOffline ): void => {
if ('accessToken' in response ){
console.log(response.accessToken);
}else {
console.log('offline');
}
}
responseGoogle({accessToken:'abc', name: 'Jim'})
responseGoogle({name: 'Joan'})