如何使用声明模块在Node中工作,我得到的编辑脚本没有错误,VS.Code中的Intellisense工作。但我得到“无法在运行时找到模块'消息'。”
澄清:我试图在相同的“命名空间”消息下同时获取api.ts和mq.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"
}
}
答案 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