我收到错误:'ResizeObserver' only refers to a type, but is being used as a value here
当尝试在 React 和 TypeScript 中使用 ResizeObserver 时。
我定义了以下接口,因为 TypeScript 不包含定义:
interface ResizeObserver {
observe(target: Element): void;
unobserve(target: Element): void;
disconnect(): void;
}
我在以下组件中使用它:
const useWidth = () => {
const ref = useRef<HTMLObjectElement>(null);
const [width, setWidth] = useState(0);
useLayoutEffect(() => {
var resizeObserver = new ResizeObserver(() => console.log("blah blah blah"))
resizeObserver.observe(ref.current)
return () => resizeObserver.disconnect()
}, [ref.current])
return [ref, width];
}
您应该安装@types/resize-observer-browser https://www.npmjs.com/package/@types/resize-observer-browsernpm 包,获取类型声明 https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/resize-observer-browser/index.d.ts。如果你真的想推出自己的接口,你可以通过declare var
in a *.d.ts
file.
declare interface ResizeObserver {
observe(target: Element): void;
unobserve(target: Element): void;
disconnect(): void;
}
declare var ResizeObserver: {
prototype: ResizeObserver;
new(callback: ResizeObserverCallback): ResizeObserver;
};
interface ResizeObserverSize {
inlineSize: number;
blockSize: number;
}
type ResizeObserverCallback = (entries: ReadonlyArray<ResizeObserverEntry>, observer: ResizeObserver) => void;
interface ResizeObserverEntry {
readonly target: Element;
readonly contentRect: DOMRectReadOnly;
readonly borderBoxSize: ResizeObserverSize;
readonly contentBoxSize: ResizeObserverSize;
}
然后它将在全球范围内可用(因为我相信它在浏览器中)并且您可以更新它:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)