【问题标题】:Typescript declaration file for an external npm package - constructor外部 npm 包的 Typescript 声明文件 - 构造函数
【发布时间】:2021-01-25 22:47:16
【问题描述】:

我在我的 Node 项目中使用 ES6 和 Typescript,但是其中一个库是 commonjs 库。 对于那个库,我创建了自己的 .d.ts 声明文件:

module "@alpacahq/alpaca-trade-api" {
   export interface AlpacaParams { ... }

   // ...

   export class Alpaca implements Broker {

      // ...
      constructor(params: AlpacaParams);
   }

   export default Alpaca;
}

一切都按预期工作,但构造函数有问题。

如果我在我的项目中使用该类,我试试这个:

this.alpaca = new Alpaca.Alpaca({...});

我被告知 Alpaca.Alpaca 不是构造函数。 它似乎工作的唯一方法是如果我这样做:

this.alpaca = new Alpaca.default({...});

我对 Typescript 很陌生,所以我确定我做错了什么。有任何想法吗? 后者有效,所以我的工作没有受到阻碍,但我想正确设置。

谢谢!

已编辑以显示 TS 配置和导入

tsconfig.json

{
  "compilerOptions": {
    "target": "es6",
    "module": "es6",
    "lib": ["es6", "es5"],
    "sourceMap": true,
    "outDir": "dist",
    "rootDir": "src",
    "strict": true,
    "moduleResolution": "node",
    "typeRoots": ["./types"],
    "esModuleInterop": true,
    "resolveJsonModule": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true
  }
} 

这就是我导入它的方式。无法弄清楚如何使它工作。如果我导入模块 ES6 样式,除非我使用 commonjs,否则它会中断。如果我使用 commonjs,我会收到“export undefined”错误。

import * as Alpaca from '@alpacahq/alpaca-trade-api';

【问题讨论】:

  • 您能发布您的 Typescript 配置以及您将此模块导入应用程序代码的方式吗?那里有几种选择组合会影响导入的工作方式。
  • 好的,已添加到原始消息中!
  • 有时只需重启 TS Server 即可解决。
  • 我重新启动了几次,不幸的是,这不是问题。

标签: node.js typescript es6-modules


【解决方案1】:

问题是您使用import * 导入所有命名导出,这意味着Alpaca 指的是模块,.default 指的是导出的类。相反,您应该只导入默认成员。

将您的导入更改为如下所示:

// Import default member from module
import Alpaca from '@alpacahq/alpaca-trade-api';

this.alpaca = new Alpaca({...});

【讨论】:

  • 谢谢,就是这样!我想我先尝试了这个,但后来我在模块分辨率设置中出错了,然后当我修复它时,我没想到要改回导入。
猜你喜欢
  • 2020-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-19
  • 2019-04-15
  • 2011-03-12
  • 2020-05-23
  • 2020-04-09
相关资源
最近更新 更多