原文链接:https://bobbyhadz.com/blog/react-cannot-find-namespace-context[1]
作者:Borislav Hadzhiev[2]
正文从这开始~
总览
在React中,为了解决"Cannot find namespace context"错误,在你使用JSX的文件中使用.tsx
扩展名,在你的tsconfig.json
文件中把jsx
设置为react-jsx
,并确保为你的应用程序安装所有必要的@types
包。
cannot-find-namespace-context.png
这里有个例子来展示错误是如何发生的。
代码语言:javascript复制// App.ts
import React from 'react';
interface UserCtx {
first: string;
last: string;
age: number;
}
const AuthContext = React.createContext<UserCtx | null>(null);
const authContext: UserCtx = {
first: 'James',
last: 'Doe',
age: 30,
};
const App = () => {
// ⛔️ Cannot find namespace 'AuthContext'.ts(2503)
return (
<AuthContext.Provider value={authContext}>
<h2>Your app here</h2>
</AuthContext.Provider>
);
};
export default App;
上述代码片段的问题在于,文件的扩展名为
.ts
,但是我们在里面编写JSX代码。
tsx
这是不被允许的,因为为了能在TypeScript文件中使用JSX,我们必须这样做:
- 以
.tsx
扩展名命名文件 - 在
tsconfig.json
文件中开启jsx
选项
确保所有你编写JSX代码的文件都有.tsx
扩展名。
// App.tsx
import React from 'react';
interface UserCtx {
first: string;
last: string;
age: number;
}
const AuthContext = React.createContext<UserCtx | null>(null);
const authContext: UserCtx = {
first: 'James',
last: 'Doe',
age: 30,
};
const App = () => {
return (
<AuthContext.Provider value={authContext}>
<h2>Your app here</h2>
</AuthContext.Provider>
);
};
export default App;
更新完文件的扩展名为.tsx
后,如果问题仍未解决,请尝试重启你的IDE和开发服务器。
打开tsconfig.json
文件,并确保jsx
选项被设置为react-jsx
。
// tsconfig.json
{
"compilerOptions": {
"jsx": "react-jsx", //