【问题标题】:Finding the correct import for a third party DefinitelyTyped module为第三方绝对类型模块找到正确的导入
【发布时间】:2018-07-22 02:54:30
【问题描述】:

我正在尝试将 Vanilla Tilt 添加到我的 TypeScript 项目中。我已经安装了它和@types/vanilla-tilt

类型有:

export namespace VanillaTilt {
...
}

export default class VanillaTilt {
  static init(...)
}

在我的代码中,我正在做import ... from 'vanilla-tilt'; 的变体。我正在尝试使用VanillaTilt.init

如果不执行(VanillaTilt as any).init 之类的操作,我无法找到一种方法。

// misnamed import. Import should be named `vanillaTilt` but found `VanillaTilt`
import VanillaTilt from 'vanilla-tilt';

// Property 'init' does not exist on typeof node_modules/@types/vanilla-tilt/index
import vanillaTilt from 'vanilla-tilt';
import { default as VanillaTilt } from 'vanilla-tilt';

// TypeScript does not throw an error, but I get `cannot read property init of undefined`.
import { VanillaTilt } from 'vanilla-tilt';

类型定义有什么问题可以正确导入吗?

【问题讨论】:

    标签: typescript definitelytyped


    【解决方案1】:

    类型定义被破坏。定义使用命名导出:

    export class VanillaTilt {
    

    但实际源代码使用默认导出:

    export default class VanillaTilt {
    

    我建议向DefinitelyTyped 提出拉取请求来修复它。在 PR 中,使用 export = class VanillaTilt(如 cmets 中的建议)以与 CommonJS 中的用法保持一致。滚动您自己的固定定义,直到它被合并。你应该可以像这样使用它:

    import VanillaTilt from 'vanilla-tilt'
    VanillaTilt.init(...)
    

    我要补充一点,您在此表单上遇到的“错误导入”错误实际上是 linter 错误,而不是编译器错误。您应该能够在 linter 配置中禁用该规则,或添加注释以免除它。

    【讨论】:

    • 这是一个很好的答案。太好了,您区分了 linter 错误和 TypeScript 错误!只是一个小的修正。根据源码,vanilla-tilt 实际上是一个 CommonJS 模块。所以声明应该使用export = 而不是export default。导入它的正确方法 仍然就像它是 default 一样。 github.com/micku7zu/vanilla-tilt.js/blob/master/lib/…
    • 感谢您的评论和更正。我实际上在这里查看这条线,但export = 可能仍然更正确。 github.com/micku7zu/vanilla-tilt.js/blob/…
    • 是的,不幸的是,生态系统现在有点崩溃。源确实只导出了一个default。这被编译成对module.exports 的赋值,然后由ESM CJS 互操作进程映射回default 导出。如果不阅读编译的源代码,真的很难知道该选择哪种形式。
    • @kingdaro 我会为它做公关;我应该按照您的回答中的建议使用export = 吗?如果是这样,你会更新它吗?否则我会按照你的答案去做。
    • 如果没有,请提出一个新问题,而不是在这里继续提问
    猜你喜欢
    • 2021-08-25
    • 1970-01-01
    • 1970-01-01
    • 2020-03-14
    • 2013-10-06
    • 1970-01-01
    • 2016-12-28
    • 2022-07-15
    • 2020-01-10
    相关资源
    最近更新 更多