使用ref解决 typescript -“没有匹配的重载调用”

g6ll5ycj  于 2023-01-27  发布在  TypeScript
关注(0)|答案(1)|浏览(301)

我要解决打字通讯员的问题。这是我得到的代码和错误。

const navRef = useRef<null | HTMLElement>(null);

const setFocusables = () => {
  let navCurrent = navRef.current || null;
  menuFocusables = [
    buttonRef.current,
    ...Array.from(navCurrent?.querySelectorAll('a')),
  ];
  firstFocusableEl = menuFocusables[0];
  lastFocusableEl = menuFocusables[menuFocusables.length - 1];
};

这是我现在得到的错误。
字母导航当前:HTML元素|null没有重载匹配此调用。
重载1/4,'(可迭代:可迭代|数组类):HTMLAnchorElement []",出现以下错误。参数类型为" NodeListOf|undefined "不能赋值给类型为" Iterable "的参数|像阵列一样。
类型"undefined"不能赋给类型"Iterable|像阵列一样。
重载第2个,共4个,'(类似数组:数组类):HTMLAnchorElement []",出现以下错误。参数类型为" NodeListOf|"undefined"不能赋给类型"ArrayLike"的参数。类型"undefined"不能赋给类型"ArrayLike"。ts(2769)
请给我解决方案。先谢谢你。
你好。
我希望能解决上述问题。
谢谢

6vl6ewon

6vl6ewon1#

您需要处理navCurrent为null的情况,因此应该如下所示:

const navRef = useRef<null | HTMLElement>(null);

const setFocusables = () => {
  let navCurrent = navRef.current || null;
  menuFocusables = [
    buttonRef.current,
    // updated this
    ...Array.from(navCurrent?.querySelectorAll('a') ?? []),
  ];
  firstFocusableEl = menuFocusables[0];
  lastFocusableEl = menuFocusables[menuFocusables.length - 1];
};

相关问题