首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解决'HTMLCanvasElement‘没有调用signatures.ts(2349)作出反应?

如何解决'HTMLCanvasElement‘没有调用signatures.ts(2349)作出反应?
EN

Stack Overflow用户
提问于 2022-11-17 16:14:06
回答 1查看 22关注 0票数 0

我有TS错误的代码,我正在使用的反应-帆布-纸屑包。当我试图为我的函数定义类型时,我继续得到以下错误,您将在下面看到。

(property) React.MutableRefObject.current: HTMLCanvasElement此表达式不可调用。类型'HTMLCanvasElement‘没有调用signatures.ts(2349)

代码语言:javascript
复制
const refAnimationInstance = useRef<HTMLCanvasElement | null>(null)
  
  const getInstance = useCallback((instance: any) => {
    refAnimationInstance.current = instance
  }, [])

  const makeShot = useCallback((particleRatio: number, opts: any) => {
    refAnimationInstance.current &&
      refAnimationInstance.current({
        ...opts,
        particleCount: Math.floor(200 * particleRatio),
      })
  }, [])

我不知道如何定义它,这样refAnimationInstance就不会在这里为.current抛出错误:

代码语言:javascript
复制
refAnimationInstance.current({
        ...opts,
        particleCount: Math.floor(200 * particleRatio),
      })

您可以在下面的链接中看到五彩纸屑的工作示例:https://codesandbox.io/s/realistic-fn-react-canvas-confetti-forked-sixvv1?file=/src/App.js:904-975

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-17 16:21:53

这个库不导出它们的类型是非常令人讨厌的,但是您仍然可以通过这种长期复杂的内置类型的使用来获得它:

代码语言:javascript
复制
import { type IProps } from "react-canvas-confetti";

type CreateConfetti = NonNullable<Parameters<NonNullable<IProps["refConfetti"]>>[0]>;

然后在需要它的地方使用类型:

代码语言:javascript
复制
const refAnimationInstance = useRef<CreateConfetti | null>(null)
  
const getInstance = useCallback((instance: CreateConfetti) => {
    refAnimationInstance.current = instance
}, []);

此外,您还可以使用可选链接来避免使用&&短路:

代码语言:javascript
复制
refAnimationInstance.current?.({
    ...opts,
    particleCount: Math.floor(200 * particleRatio),
})
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74478737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档