diff --git a/src/usePromise.ts b/src/usePromise.ts index 0f5e84c..00f0bbe 100644 --- a/src/usePromise.ts +++ b/src/usePromise.ts @@ -1,17 +1,23 @@ import { useEffect, useState, useRef } from 'react' +type PromiseState = { + loading: true + error: null + value: undefined +} | { + loading: false + error: null + value: T +} | { + loading: false + error: Error + value: undefined +}; + export default function usePromise( promiseOrFn: (() => Promise) | Promise -): { - loading: boolean - error: Error | null - value: T | undefined -} { - const [state, setState] = useState<{ - loading: boolean - error: Error | null - value: T | undefined - }>({ +): PromiseState { + const [state, setState] = useState>({ loading: !!promiseOrFn, error: null, value: undefined @@ -22,7 +28,7 @@ export default function usePromise( if (!promiseOrFn) { setState({ loading: false, - error: null, + error: new TypeError(`The argument passed to usePromise must be either a promise or a function, but you passed a ${typeof promiseOrFn}`), value: undefined }) } else {