带有 React.createContext 的 Typescript HOC

Fra*_*vey 4 firebase typescript reactjs react-context

我有这个 .js 片段,我需要将其转换为 Typescript。

import React from 'react';

const FirebaseContext = React.createContext(null)

export const withFirebase = Component => props => (
    <FirebaseContext.Consumer>
        {firebase => <Component {...props} firebase={firebase} />}
    </FirebaseContext.Consumer>
)

export default FirebaseContext
Run Code Online (Sandbox Code Playgroud)

我最好的猜测是

const FirebaseContext = React.createContext(null)

export const withFirebase = (Component: React.ComponentClass) => (props: any) => (
    <FirebaseContext.Consumer>
        {firebase => <Component {...props} firebase={firebase} />}
    </FirebaseContext.Consumer>
)
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用上下文时 – 通过传递一个new Firebase()

import React from 'react';
import ReactDOM from 'react-dom';

import './index.css';
import * as serviceWorker from './serviceWorker';

import App from './components/App';
import Firebase, { FirebaseContext } from './components/Firebase';

ReactDOM.render(
    <FirebaseContext.Provider value={new Firebase()}>
        <App />
    </FirebaseContext.Provider>,
    document.getElementById('root'),
);

serviceWorker.unregister()
Run Code Online (Sandbox Code Playgroud)

在这种情况下 - 我得到 Type 'Firebase' is not assignable to type 'null'.

Shu*_*tri 6

您似乎没有为 指定任何类型createContext。向其添加 Firebase 类型应该可以工作

const FirebaseContext = React.createContext<Firebase | null>(null);
Run Code Online (Sandbox Code Playgroud)