找到第三方DefinitelyTyped模块的正确导入

时间:2018-02-12 00:28:41

标签: typescript definitelytyped

我试图将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';

类型定义是否有问题可以正确导入?

1 个答案:

答案 0 :(得分:2)

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

export class VanillaTilt {

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

export default class VanillaTilt {

我建议向DefinitelyTyped发出拉取请求以修复它。在PR中,使用export = class VanillaTilt(如评论中所示)与CommonJS中的用法一致。滚动您自己的固定定义,直到它合并为止。您应该可以这样使用它:

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

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