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;
+ }
+};