typescript :如何在node中使用“declare module”

zfciruhq  于 2023-05-19  发布在  TypeScript
关注(0)|答案(2)|浏览(493)

我如何让声明模块在Node中工作,我得到的类型脚本编译没有错误和智能感知在VS。代码的工作。但是我在运行时得到“Cannot find module 'messages'”。
澄清:我试图让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"
   }
}
yzuktlbb

yzuktlbb1#

在node中你不需要使用declare module,每个文件都只是一个module,declare module是为了d.ts和其他用途。
在你的例子中,只需要像这样在/messages目录下添加一个index.ts,然后删除declare模块。

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

export {M1, M2};
dfuffjeb

dfuffjeb2#

这里有几件事,因为你试图导入没有相对路径的消息,只有名称,TypeScript试图做的是在node_modules文件夹中查找模块。所以它才找不到。
所以,如果你想导入你自己的模块,你应该使用一个相对路径。
每个文件都是一个模块。因此,如果您有一个名为mq.ts的文件,则应按如下方式导入它:

import { Put } from './mq';

语法:

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

仅在为现有node_modules创建类型时使用,通常需要创建一个.d.ts文件来执行此操作。
Here's the documentation on module resolution for TypeScript, it is a good one

相关问题