分配前使用的打字稿变量

Posted

技术标签:

【中文标题】分配前使用的打字稿变量【英文标题】:Typescript variable being used before assigned 【发布时间】:2020-05-22 20:28:24 【问题描述】:

按照here 的说明,我正在尝试在构建我的 Apollo 客户端之前缓存来自 Auth0 的端点 URL 和令牌:

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;

对于上面的 endpointtoken,我收到错误 TS2454(变量在分配之前使用)。知道如何解决这个问题吗?

【问题讨论】:

我不熟悉这种类型的代码,但它是否有可能在设置令牌和端点之前到达return endpoint, token ; 【参考方案1】:

您将 endpointtoken 都声明为变量,但在检查 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 = "";

【讨论】:

以上是关于分配前使用的打字稿变量的主要内容,如果未能解决你的问题,请参考以下文章

打字稿:键入'字符串| undefined' 不能分配给 type 'string'

打字稿中的通用对象类型

打字稿函数类型分配问题

打字稿:类型'null'不可分配给类型错误

打字稿:'字符串| undefined' 不可分配给类型 'string'

打字稿错误类型无法分配给状态 - usestate