我们如何从NPM库中声明没有声明文件的导入类型?

时间:2017-02-16 01:46:02

标签: javascript typescript

例如,如果我的应用中有以下内容,

import Node from 'infamous/motor/Node'
console.log(Node)

效果很好。但是,当我真正用它做点什么的时候,

import Node from 'infamous/motor/Node'
console.log(new Node)

然后TypeScript会抱怨,因为Node没有类型定义。如何定义节点类型?

该库没有自己的类型声明。我试过像

这样的东西
import MotorNode from 'infamous/motor/Node'

declare class MotorNode {}
console.log(' --- ', new MotorNode)

但我收到了错误

./src/app.tsx(6,8): error TS2440: Import declaration conflicts with local declaration of 'MotorNode'

1 个答案:

答案 0 :(得分:2)

当我需要做你想做的事情时,我创建了一个externals.d.ts文件,我在其中为我的项目添加了模块扩充,并确保我的tsconfig.json将其包含在编译中。

在你的情况下,增强可能看起来像这样:

declare module "infamous/motor/Node" {
  class Node {
    // Whatever you need here...
  }

  export default Node;
}

我将它放在一个单独的文件中,因为像这样的模块扩充必须是全局的(必须之外的任何模块),以及包含顶级importexport是一个模块。 (请参阅TypeScript参与者的this comment。)