typescript 如何在Visual Studio 2019中解决“只能使用”esModuleInterop“标志默认导入”?

7kjnsjlb  于 2023-01-27  发布在  TypeScript
关注(0)|答案(5)|浏览(457)

我正在Visual Studio 2019中将JavaScript文件升级为TypeScript,以便更好地管理它们。
当我想从另一个文件导入一个模块时,我看到弯弯曲曲的线条抱怨:
只能使用“esModuleInterop”标志默认导入x
我该怎么解决这个问题?

sbtkgmzw

sbtkgmzw1#

一个简单的解决方案是在tsconfig.json文件的compilerOptions中设置"esModuleInterop": true
示例:

{
  "compilerOptions": {    
    "esModuleInterop": true
  }
}
5rgfhyps

5rgfhyps2#

我有同样的问题,并解决它如下:
改变这个

import foo from 'foo';

到这个

import * as foo from 'foo';
13z8s7eq

13z8s7eq3#

我在使用Visual Studio“添加新项”功能添加TypeScript JSX文件(.tsx扩展名)后遇到了这个问题,即使我的tsconfig中有esModuleInterop=true。我的其他tsx模块都没有出现这个错误,我发现如果我添加一个新的文本文件并将其重命名为.tsx,错误就不会发生。
经过一番搜寻,罪魁祸首似乎是由visual studio添加到csproj中的这些行

<ItemGroup>
    <None Remove="ClientApp\src\public\foo.tsx" />
  </ItemGroup>

  <ItemGroup>
    <TypeScriptCompile Include="ClientApp\src\public\foo.tsx" />
  </ItemGroup>

我从csproj中删除了它们,错误消失了

ltqd579y

ltqd579y4#

在我的案例中,此解决方案帮助:
必须将tsconfig.json文件的"生成操作"设置为"内容"。否则,自VS 2019起,Visual Studio将忽略此文件。
找到了here

5sxhfpxr

5sxhfpxr5#

TypeScript支持export =来建模传统的CommonJS和AMD工作流。export =语法指定从模块导出的单个对象。使用export =导出模块时,必须使用特定于TypeScript的import module = require(“module”)来导入模块。
可以按如下方式导入模块:

import moduleName = require('moduleName');

请参考:https://www.typescriptlang.org/docs/handbook/modules.html#export--and-import--require

相关问题