这似乎是一个微不足道的问题,但需要使用什么设置/配置来解决这个问题并不是很明显。
下面是Hello World程序目录结构和源代码:
目录结构:
| -- HelloWorldProgram
| -- HelloWorld.ts
| -- index.ts
| -- package.json
| -- tsconfig.json
Run Code Online (Sandbox Code Playgroud)
索引.ts:
import {HelloWorld} from "./HelloWorld";
let world = new HelloWorld();
Run Code Online (Sandbox Code Playgroud)
HelloWorld.ts:
export class HelloWorld {
constructor(){
console.log("Hello World!");
}
}
Run Code Online (Sandbox Code Playgroud)
包.json:
{
"type": "module",
"scripts": {
"start": "tsc && node index.js"
}
}
Run Code Online (Sandbox Code Playgroud)
现在,执行该命令会 tsc && node index.js导致以下错误:
internal/modules/run_main.js:54
internalBinding('errors').triggerUncaughtException(
^
Error [ERR_MODULE_NOT_FOUND]: Cannot find module 'HelloWorld' imported from HelloWorld\index.js
Did you mean to import ../HelloWorld.js?
at finalizeResolution (internal/modules/esm/resolve.js:284:11)
at …Run Code Online (Sandbox Code Playgroud) 我觉得这是一个应该回答却找不到答案的问题。
我已将 TS 项目切换到 ESM。所以我package.json现在有"type": "module"和我的tsconfig.json:
"target": "es2020",
"lib": ["es2020"],
"module": "node16",
"moduleResolution": "Node16",
"esModuleInterop": true, // Eases ESM support
"types": ["node"],
"allowSyntheticDefaultImports": true,
...
Run Code Online (Sandbox Code Playgroud)
大多数情况下,一切都很好,但有一些模块给我带来了麻烦。例如aedes和mqemitter并等待
import wait from 'wait'
await wait(1000)
Run Code Online (Sandbox Code Playgroud)
上面的代码“有效”,但 VSCode 红色强调了第二行中的“等待”错误:
This expression is not callable.
Type 'typeof import(".../node_modules/wait/wait")' has no call signatures.
Run Code Online (Sandbox Code Playgroud)
我当然尝试过:
import * as wait from 'wait'
Run Code Online (Sandbox Code Playgroud)
和
import { default as wait } from 'wait'
Run Code Online (Sandbox Code Playgroud)
我的 TS 配置中有我认为相关的 ESM 设置。
我使用的是 …