diff --git a/src/factory/createHTMLMediaHook.ts b/src/factory/createHTMLMediaHook.ts index bd384f50..0f805755 100644 --- a/src/factory/createHTMLMediaHook.ts +++ b/src/factory/createHTMLMediaHook.ts @@ -27,25 +27,20 @@ export interface HTMLMediaControls { seek: (time: number) => void; } -type createHTMLMediaHookReturn = [ - React.ReactElement, - HTMLMediaState, - HTMLMediaControls, - { current: HTMLAudioElement | null } -]; +type MediaPropsWithRef = HTMLMediaProps & { ref?: React.MutableRefObject }; -export default function createHTMLMediaHook(tag: 'audio' | 'video') { +export default function createHTMLMediaHook(tag: 'audio' | 'video') { return ( elOrProps: HTMLMediaProps | React.ReactElement - ): createHTMLMediaHookReturn => { - let element: React.ReactElement | undefined; - let props: HTMLMediaProps; +) => { + let element: React.ReactElement> | undefined; + let props: MediaPropsWithRef; if (React.isValidElement(elOrProps)) { element = elOrProps; props = element.props; } else { - props = elOrProps as HTMLMediaProps; + props = elOrProps; } const [state, setState] = useSetState({ @@ -56,7 +51,7 @@ export default function createHTMLMediaHook(tag: 'audio' | 'video') { muted: false, volume: 1, }); - const ref = useRef(null); + const ref = useRef(null); const wrapEvent = (userEvent, proxyEvent?) => { return (event) => { @@ -234,6 +229,6 @@ export default function createHTMLMediaHook(tag: 'audio' | 'video') { } }, [props.src]); - return [element, state, controls, ref]; - }; -} + return [element, state, controls, ref] as const; + } +};