打字稿:如何在节点中使用“声明模块”

时间:2016-04-13 13:14:19

标签: node.js typescript

如何使用声明模块在Node中工作,我得到的编辑脚本没有错误,VS.Code中的Intellisense工作。但我得到“无法在运行时找到模块'消息'。”

澄清:我试图在相同的“命名空间”消息下同时获取api.ts和mq.ts类。

我有以下节点项目设置。

  • /messages/api.ts
  • /messages/mq.ts
  • /main.ts

api.ts

declare module "messages" {
export class Put {

    }
}

mq.ts

declare module "messages"{
export class GetWork {

    }
}

main.ts

import * as messages from "messages";
let x = new messages.GetWork();

tsconfig.json

{
   "compilerOptions": {
      "target": "es6",
      "module": "commonjs"
   },
   "exclude": [  ]
}

jsconfig.json

{
   "compilerOptions": {
       "target": "ES6"
   }
}

2 个答案:

答案 0 :(得分:1)

在节点中,您不需要使用声明模块,每个文件只是一个模块,声明模块用于d.ts和其他用途。

在你的情况下,只需在/ messages目录下添加一个index.ts,然后删除declare module。

import * as M1 form "./M1";
import * as M2 form "./M2";

export {M1, M2};

答案 1 :(得分:1)

这里有一些事情,因为您尝试导入没有相对路径的消息,仅使用名称,TypeScript尝试做的是在node_modules文件夹中查找模块。这就是为什么它找不到任何东西。

因此,如果您想导入一个自己的模块,则应使用相对路径。

现在,每个文件都是一个模块。因此,如果您有一个名为mq.ts的文件,则应按如下方式导入:

import { Put } from './mq';

语法:

declare module "messages" {
  // ....
}

仅在为现有node_modules创建Typings时使用,通常会创建一个.d.ts文件来执行此操作。

Here's the documentation on module resolution for TypeScript, it is a good one