TypeScript 编译器包含来自 TypeScript 定义的具有不同名称的模块

TypeScript compiler to include modules from TypeScript definitions with a different name

我有一个简单的 Nodejs Typescript 项目,它通过 TypeScript 定义文件导入一些 JavaScript 库。即:

import * as zmq from 'zmq'
const sock = zmq.socket("push");

当我编译这个时,结果是:

"use strict";
exports.__esModule = true;
var zmq = require("zmq");
var sock = zmq.socket("push");
//# sourceMappingURL=index.js.map

看起来不错,除了应该行:

var zmq = require("zmq");

应该是zmq的Node JavaScript模块,即:

var zmq = require("../node_modules/zeromq");

如何让编译器执行此替换?

我的配置如下:

{
  "compilerOptions": {
    "declaration": true,
    "module": "commonjs",
    "moduleResolution": "node",
    "noImplicitAny": true,
    "outDir": "./lib",
    "preserveConstEnums": true,
    "removeComments": true,
    "sourceMap": true,
    "typeRoots": [
      "./node_modules/@types"
    ]
  },
  "include": [
    "node_modules/@types/**/*.d.ts",
    "src/**/*"
  ],
  "exclude": [
    "node_modules",
    "**/*-spec.ts",
    "!node_modules/@types/**/*.d.ts"
  ]
}

并且zmq安装如下:

npm install zeromq --save
npm install @types/zmq --save

任何建议都很好 - 谢谢。

编辑:

好的,问题可能是因为 zeromq 是我希望使用的 zeromq 库的最新名称,但类型仍然称为 zmq。因此,似乎在执行编译时,编译器无法确定 zmq 应该映射到 zeromq(以及为什么会映射)。

那么除了重命名@types/zmq 之外,是否有解决此问题的方法?

So would there be a way around this, short of @types/zmq being renamed?

添加 types.d.ts 包含以下内容的文件:

declare module "zeromq" {
  export * from "zmq"
}