我如何让声明模块在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"
}
}
2条答案
按热度按时间yzuktlbb1#
在node中你不需要使用declare module,每个文件都只是一个module,declare module是为了d.ts和其他用途。
在你的例子中,只需要像这样在/messages目录下添加一个index.ts,然后删除declare模块。
dfuffjeb2#
这里有几件事,因为你试图导入没有相对路径的消息,只有名称,TypeScript试图做的是在node_modules文件夹中查找模块。所以它才找不到。
所以,如果你想导入你自己的模块,你应该使用一个相对路径。
每个文件都是一个模块。因此,如果您有一个名为mq.ts的文件,则应按如下方式导入它:
语法:
仅在为现有node_modules创建类型时使用,通常需要创建一个.d.ts文件来执行此操作。
Here's the documentation on module resolution for TypeScript, it is a good one。