相关疑难解决方法(0)

在 Typescript 编译(ES6 模块)期间在相对导入语句上附加 .js 扩展名

这似乎是一个微不足道的问题,但需要使用什么设置/配置来解决这个问题并不是很明显。

下面是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)

javascript node.js npm node-modules typescript

16
推荐指数
7
解决办法
2954
查看次数

Typescript 导入 ESM 默认导出

我觉得这是一个应该回答却找不到答案的问题。

我已将 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)

大多数情况下,一切都很好,但有一些模块给我带来了麻烦。例如aedesmqemitter等待

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 设置。

我使用的是 …

typescript es6-modules

8
推荐指数
1
解决办法
1662
查看次数