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



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

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'

当我需要做您要尝试的事情时,我创建了一个externals.d.ts文件,其中我将模块增强为我的项目,并确保我的tsconfig.json包含在汇编中。

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

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

我将其放在单独的文件中,因为这样的模块必须是全局的(必须是 exter 任何模块),并且一个包含一个顶级importexport的文件是一个模块。(请参阅Typescript贡献者的这一评论。)

最新更新