模块导入忽略了打字稿`esModuleInterop`

Posted

技术标签:

【中文标题】模块导入忽略了打字稿`esModuleInterop`【英文标题】:Typescript `esModuleInterop` ignored with module import 【发布时间】:2021-07-24 22:52:26 【问题描述】:

我正在尝试将此模块导入我的 Typescript 文件,但它会引发有关如何导入模块的错误。这是一个 Google Firebase 函数脚本,但我在我的项目代码的其他区域导入这个模块就好了。

10 const flamelinkApp = flamelink(
                        ~~~~~~~~~

  src/index.ts:3:1
    3 import * as flamelink from 'flamelink/app';
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Type originates at this import. A namespace-style import cannot be called or constructed, and will cause a failure at runtime. Consider using a default import or import require here instead.

NMy Typescript 配置文件在这里:


  "compilerOptions": 
    "module": "commonjs",
    "noImplicitReturns": true,
    "noUnusedLocals": true,
    "outDir": "lib",
    "sourceMap": true,
    "esModuleInterop": true,
    "strict": true,
    "target": "es2017"
  ,
  "compileOnSave": true,
  "include": [
    "src"
  ]

您会看到 esModuleInterop 标志设置为 true,这应该可以解决此问题。

我也尝试过这样的导入: import flamelink from 'flamelink/app'; 并得到这个错误:

Module '"/Users/leeprobert/Documents/dev/PebbleStudios/Sciex/Grace/dev/pebble_sciex_grace_react/client/functions/node_modules/flamelink/public"' can only be default-imported using the 'esModuleInterop' flagts(1259)
public.d.ts(61, 1): This module is declared with using 'export =', and can only be used with a default import when using the 'esModuleInterop' flag.

有什么想法吗?

【问题讨论】:

我在导入时刻时遇到了同样的问题。如果您找到解决方案,请更新。 【参考方案1】:

根据警告消息,在我看来,我们需要导入模块的默认值而不是命名空间。你可以试试这个吗?

import flamelink from 'flamelink/app'

【讨论】:

我试过这个。将编辑我的帖子以反映该错误。 该错误表明未打开 esModuleInterop。你能确定 esModuleInterop 是打开的吗?也许 tsconfig 在某处被覆盖。我在这里发现了同样的问题github.com/flamelink/flamelink-js-sdk/issues/58 有趣!通过 CLI 部署的 Cloud Function 可以正常工作,因此我的代码中的错误与 VSCode 的实时编译器有关,而不是与部署过程有关。但是我在全局 tsconfig 中也设置了该标志。所以,不知道如何解决这个错误。

以上是关于模块导入忽略了打字稿`esModuleInterop`的主要内容,如果未能解决你的问题,请参考以下文章

打字稿模块分辨率

打字稿导入文本文件“错误 TS2307:找不到模块”

如何将图像导入打字稿?他说“找不到模块”

打字稿:不能在模块外使用导入语句

打字稿。导入“模块/子目录”npm 包时未找到环境声明

打字稿导入模块作为变量不起作用