【发布时间】:2023-01-09 12:50:18
【问题描述】:
我有以下提供者/上下文...
interface Props {
children: JSX.Element
}
const AuthContext = createContext({});
export const AuthProvider = ({ children }: Props) => {
const [auth, setAuth] = useState({});
return (
<AuthContext.Provider value={{auth, setAuth}}>
{children}
</AuthContext.Provider>
);
}
export default AuthContext;
我正在使用自定义挂钩来包装此上下文用法,如下所示:
import AuthContext from "../context/AuthProvider";
const useAuth = () => {
return useContext(AuthContext);
}
export default useAuth;
然后,我尝试使用钩子:
const { setAuth } = useAuth();
我在 setAuth 上收到错误 - 属性 setAuth 在类型 {} 上不存在。
这是我在 es6 中编写的一些代码,我正在将其转换为 TS,但我不确定如何解决这个特定问题。
【问题讨论】:
-
能否请您尝试设置上下文的默认值
null,例如:createContext<any>(null);? -
当您将空对象作为默认值传递给
createContext时,类型将被推断为{}。您需要传递一个泛型来告诉它什么类型实际上是。 -
@Thremulant 这是不必要的和误导的。为什么类型应该是
any? OP 知道对象的形状,{}是比null更合理的默认值。 -
@JaredSmith 明白了。在那种情况下,它应该是
createContext<IAuthContext>,其中新接口包括auth和setAuth -
@Thremulant 正确!
标签: reactjs typescript