当没有为该单个值定义类型时,如何从库中导入

How can I import from a library when there is no type defined for that single value

我正在开发一个使用组件库的项目,该组件库使用 react-spring。我无法控制组件库,因此我无法控制它使用 react-spring v8

我在 PR 上找到了 comment,它告诉我如何在测试环境中 运行 时修复动画。它要求我导入 Globals 对象。当我尝试通过 import { Globals } 这样做时,我收到错误消息 Module '"react-spring"' has no exported member 'Globals'.ts(2305),因为我的项目正在使用 Typescript(其中的说明适用于 JS)

当我查看 node_modules 目录中的 react-spring 代码时,我可以看到 Globals 对象肯定在主代码和模块代码中都导出了.

web.js(主要):

export { apply, config, update, extendedAnimated as animated, extendedAnimated as a, interpolate as interpolate, Globals, useSpring, useTrail, useTransition, useChain, useSprings };

web.cjs.js(模块):

exports.Globals = Globals;

然而,当我查看 types provide by react-spring 时,Globals 没有任何内容,我担心这就是导致我无法导入 Globals 以便我可以提供模拟的原因requestAnimationFrame 在测试期间按照指示进行。

我是 Typescript 的新手,所以我可能误解了一些东西,我已经尝试 Google 解决方案,但我几乎只能找出如何处理一个根本没有类型的库,但没有关于如何修复库提供的类型中的“漏洞”的任何内容。

这里是一个 CodeSandbox,它表现出同样的错误(一定是在编辑沙箱。在预览模式下不显示。

这看起来像是 react-spring@8 中的 Typescript 错误,因为是的,Globals 已导出。如果您有兴趣针对 v8 分支进行 PR,我们可以发布此修复程序。

如果您想立即修复,可以添加:

declare module "react-spring" {
  interface Globals {
    injectFrame: () => void;
  }

  export const Globals: Globals;
}

通常到 *.d.ts 文件或您需要的地方。这将为您提供所需的功能,您可以在需要的地方继续添加更多功能。否则你可以使用 // @ts-expect-error 来消除错误。

这是演示分辨率的沙箱 – https://codesandbox.io/s/admiring-frog-5enu2?file=/src/App.tsx