import React from 'react' type CreateContex = readonly [ () => A, React.ProviderExoticComponent> ] function createContext( errorMessage: string = 'useContext must be inside a Provider with a value' ): CreateContex { const ctx = React.createContext(undefined) function useCtx(): A { const c = React.useContext(ctx) if (!c) throw new Error(errorMessage) return c } // make TypeScript infer a tuple, not an array of union types return [useCtx, ctx.Provider] as const } export default createContext