在我的钩子中,我想保留一个对HTML元素的引用。元素的类型可以是从HTMLElement
继承的任何类,如HTMLDivElement
,HTMLAnchorElement
等。
const useSomething = () => {
const ref = useRef<HTMLElement | null>(null);
return ref;
};
const Component = () => {
const ref = useSomething();
return <div ref={ref} />;
};
字符串
类型HTMLDivElement
继承自HTMLElement
,但代码导致以下错误
Type 'MutableRefObject<HTMLElement | null>' is not assignable to type 'LegacyRef<HTMLDivElement> | undefined'.
Type 'MutableRefObject<HTMLElement | null>' is not assignable to type 'RefObject<HTMLDivElement>'.
Types of property 'current' are incompatible.
Type 'HTMLElement | null' is not assignable to type 'HTMLDivElement | null'.
Property 'align' is missing in type 'HTMLElement' but required in type 'HTMLDivElement'.ts(2322)
型
我通过AssertRefObject<HTMLDivElement>
的引用解决了这个问题
<div ref={ref as RefObject<HTMLDivElement>} />;
型
但是强制性的是,人们不需要对组件中的ref执行任何额外的操作。
<div ref={ref}/>; // no warnings
型
有没有办法在组件中不使用ref as RefObject<HTMLDivElement>
的情况下解决这个问题?
1条答案
按热度按时间i5desfxk1#
那么问题是你的类型在你的useRef中不正确.你允许它接受null作为可接受的引用类型.这不是你想要的.你想仍然保持你所期望的类型(而不是异常-即null)。其次要具体,如果可以的话使用HTMLDivElement类型。
字符串
而不是
型
你甚至可以输入
<HTMLDivElement | HTMLElement>
,但我不建议这样做。所以你面临这个错误的原因是因为null对于你的引用来说不是一个可接受的类型,并且没有重叠(正如它所指出的那样)。