本文介绍了在分配之前正在使用Typescript变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
按照说明进行操作在此,我正在尝试在构造Apollo客户端之前从Auth0缓存我的终结点URL和令牌:
As per instructions followed here, I'm trying to cache my endpoint URL and token from Auth0 before constructing my Apollo client:
import React from 'react';
import { ApolloClient, ApolloProvider, from, HttpLink, InMemoryCache } from '@apollo/client';
import { setContext } from '@apollo/link-context';
import { useAuth0 } from './auth/AuthContext';
const App: React.FC = () => {
const { isLoading, getTokenSilently, getIdTokenClaims } = useAuth0();
if (isLoading) return <Loader />;
let endpoint: string;
let token: string;
const contextLink = setContext(async () => {
if (!token) {
token = await getTokenSilently();
}
if (!endpoint) {
endpoint = await getIdTokenClaims()['https://example.com/graphql_endpoint'];
}
return { endpoint, token };
});
/**
* TODO: check for autorization error and remove token from cache
* See: https://www.apollographql.com/docs/react/v3.0-beta/api/link/apollo-link-context/
*/
const apolloClient = new ApolloClient({
cache: new InMemoryCache(),
link: from([
contextLink,
new HttpLink({
uri: endpoint || '',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${token}`
}
})
])
});
return (
<ApolloProvider client={apolloClient}>
<div />
</ApolloProvider>
);
};
export default App;
我在上面的endpoint
和token
上都遇到错误TS2454(在分配变量之前使用了变量).知道我如何解决这个问题吗?
I'm getting the error TS2454 (variable is used before being assigned) for both endpoint
and token
above. Any idea how I can get around this?
推荐答案
您要将endpoint
和token
都声明为变量,但在将它们检查到setContext之前未将它们初始化为任何东西.
You're declaring both endpoint
and token
as variables, but not initializing them to anything before checking them inside of setContext.
let endpoint: string;
let token: string;
const contextLink = setContext(async () => {
if (!token) {
token = await getTokenSilently();
}
if (!endpoint) {
endpoint = await getIdTokenClaims()['https://example.com/graphql_endpoint'];
}
return { endpoint, token };
});
尝试设置默认值:
let endpoint: string = "";
let token: string = "";
这篇关于在分配之前正在使用Typescript变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!