diff --git a/src/use-observable.ts b/src/use-observable.ts
index 2ed6858e..2ce08983 100644
--- a/src/use-observable.ts
+++ b/src/use-observable.ts
@@ -4,20 +4,13 @@ import useConstant from 'use-constant'
 
 import { RestrictArray } from './type'
 
-export type InputFactory<State, Inputs = undefined> = Inputs extends undefined
-  ? (state$: Observable<State>) => Observable<State>
-  : (inputs$: Observable<RestrictArray<Inputs>>, state$: Observable<State>) => Observable<State>
-
-export function useObservable<State>(inputFactory: InputFactory<State>): State | null
-export function useObservable<State>(inputFactory: InputFactory<State>, initialState: State): State
-export function useObservable<State, Inputs>(
-  inputFactory: InputFactory<State, Inputs>,
-  initialState: State,
-  inputs: RestrictArray<Inputs>,
-): State
-
+export type InputFactory<State> = (state$: Observable<State>) => Observable<State>;
+export type InputFactoryWithInputs<State, Inputs> = (inputs$: Observable<RestrictArray<Inputs>>, state$: Observable<State>) => Observable<State>;
+export function useObservable<State>(inputFactory: InputFactory<State>): State | null;
+export function useObservable<State>(inputFactory: InputFactory<State>, initialState: State): State;
+export function useObservable<State, Inputs>(inputFactory: InputFactoryWithInputs<State, Inputs>, initialState: State, inputs: RestrictArray<Inputs>): State;
 export function useObservable<State, Inputs extends ReadonlyArray<any>>(
-  inputFactory: InputFactory<State, Inputs>,
+  inputFactory: InputFactoryWithInputs<State, Inputs>,
   initialState?: State,
   inputs?: RestrictArray<Inputs>,
 ): State | null {
@@ -38,7 +31,7 @@ export function useObservable<State, Inputs extends ReadonlyArray<any>>(
         state$: Observable<State | undefined>,
       ) => Observable<State>)(inputs$, state$) as BehaviorSubject<State>
     } else {
-      output$ = (inputFactory as (state$: Observable<State | undefined>) => Observable<State>)(
+      output$ = (inputFactory as unknown as (state$: Observable<State | undefined>) => Observable<State>)(
         state$,
       ) as BehaviorSubject<State>
     }