¿Hay alguna razón por la que el argumento defaultValue
no sea opcional aquí?
import * as React from 'react';
import * as firebase from 'firebase/app';
interface AuthProps {
children: any;
}
interface AuthState {
user: firebase.User | null;
}
interface AuthContextProps extends AuthState {
updateUser(user: firebase.User | null): void;
}
export const AuthContext = React.createContext<AuthContextProps>(); // <-- ERROR HERE!
// export const AuthConsumer = AuthContext.Consumer;
export const AuthProvider = (props: AuthProps) => {
const [state, setState] = React.useState<AuthState>({
user: null,
});
const updateUser = (user: firebase.User | null) => setState({ user });
return (
<AuthContext.Provider
value={{
updateUser,
user: state.user,
}}
>
{props.children}
</AuthContext.Provider>
);
};
URL de documentos: https://reactjs.org/docs/context.html#reactcreatecontext
El argumento defaultValue solo se usa cuando un componente no tiene un Proveedor coincidente encima en el árbol.
Tengo un Proveedor coincidente arriba en el árbol, por lo que debería poder crear un contexto sin establecer un valor predeterminado o me equivoco.
Estoy cerrando este problema por ahora. Si alguien piensa que esto es un problema real, entonces sea libre de contribuir.
No tener un valor predeterminado impide que funcione la compilación de ejecución de mecanografiado. ¿Hay alguna forma de hacer esto opcional?
Si desea compilar su código sin un valor predeterminado, puede iniciarlo con null
.
export const AuthContext = React.createContext(null)
~ La solución null
ya no me funciona. Presentaré un nuevo problema. ~
Editar: no, https://github.com/DefinitelyTyped/DefinitelyTyped/pull/34854 menciona por qué. Ah bueno.
Comentario más útil
No tener un valor predeterminado impide que funcione la compilación de ejecución de mecanografiado. ¿Hay alguna forma de hacer esto opcional?