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

标签 javascript node.js typescript typescript-typings typescript2.0

我有一个简单的 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"
}

关于javascript - TypeScript 编译器包含来自 TypeScript 定义的具有不同名称的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44623493/

相关文章:

javascript - 在javascript中动态扩展一个类

node.js - 如何使用nodejs获取cloudfront/负载均衡器背后的协议(protocol)?

reactjs - event.currentTarget.name 返回为 currentTarget

javascript - JavaScript/NodeJS是否会自动引发错误?

javascript - Typescript 跨项目共享原始类型的自定义方法

javascript - 取消时恢复文本区域值

javascript - 与一个外键关联序列化

javascript - Firebase `is not a function` Firebase 5.11.1 及更高版本出错

javascript - 编辑后保存捕获的屏幕截图

node.js - Google计算引擎书架教程: npm ERR!网络读取ECONNRESET