useRef には便宜上のオーバーロードがまだ存在し、useRef<T>(null) は自動的に RefObject<T | null> を返すようになっています。useRef の引数必須化に対する移行を容易にするために、useRef(undefined) に対する実用的なオーバーロードが追加され、自動的に RefObject<T | undefined> 型を返すようになります
import { useRef, useEffect } from 'react';
function InputFocus() {
// inputRef は RefObject<HTMLInputElement | null>になる
const inputRef = useRef<HTMLInputElement>(null);
useEffect(() => {
inputRef.current?.focus();
}, []);
return <input ref={inputRef} defaultValue="React 19 + TypeScript" />;
}
コールバック関数のref は Ref になります
type Ref<T> = RefCallback<T> | RefObject<T | null> | null;