外部 npm 包的 Typescript 声明文件 - 构造函数
Typescript declaration file for an external npm package - constructor
我在我的 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;
}
一切都按预期工作,但构造函数出现问题。
如果我在我的项目中使用 class,我会尝试这样做:
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,我会收到“导出未定义”错误。
import * as Alpaca from '@alpacahq/alpaca-trade-api';
问题是您正在导入所有带有 import *
的命名导出,这意味着 Alpaca
指的是模块,.default
指的是导出的 class。相反,您应该只导入默认成员。
将您的导入更改为如下所示:
// Import default member from module
import Alpaca from '@alpacahq/alpaca-trade-api';
this.alpaca = new Alpaca({...});
我在我的 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;
}
一切都按预期工作,但构造函数出现问题。
如果我在我的项目中使用 class,我会尝试这样做:
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,我会收到“导出未定义”错误。
import * as Alpaca from '@alpacahq/alpaca-trade-api';
问题是您正在导入所有带有 import *
的命名导出,这意味着 Alpaca
指的是模块,.default
指的是导出的 class。相反,您应该只导入默认成员。
将您的导入更改为如下所示:
// Import default member from module
import Alpaca from '@alpacahq/alpaca-trade-api';
this.alpaca = new Alpaca({...});