在typescript中,如何使用es6语法导入带有默认导出的普通javascript文件?

在typescript中,如何使用es6语法导入带有默认导出的普通javascript文件?,javascript,typescript,Javascript,Typescript,假设我在我的typescript项目中有一个文件,出于某些原因,我希望它只是简单的JS(不想听到关于它是好是坏的原因的争论) 示例Javascript文件(名为foo.js): 使用上述Javascript文件的同一文件夹中的Typescript文件 import foo from "./foo"; 当我执行此操作并尝试运行typescript编译器时,会出现以下错误: 错误TS7016:找不到模块“/foo”的声明文件。 “{fileLocation}/foo.js”隐式具有“any”类型

假设我在我的typescript项目中有一个文件,出于某些原因,我希望它只是简单的JS(不想听到关于它是好是坏的原因的争论)

示例Javascript文件(名为foo.js):

使用上述Javascript文件的同一文件夹中的Typescript文件

import foo from "./foo";
当我执行此操作并尝试运行typescript编译器时,会出现以下错误:

错误TS7016:找不到模块“/foo”的声明文件。 “{fileLocation}/foo.js”隐式具有“any”类型

我已经读了一些关于声明文件的文档。在一个真实的例子中,foo的对象结构并不简单。我不想仅仅为了在我的项目中使用它而定义它的结构


是否有一种简单直接的方法将此模块声明为type any并继续我的一天?

确保创建一个键入文件foo.d.ts

//foo.d.ts
声明模块'foo';
并在tsconfig.json文件中将
noImplicitAny
设置为false:

“noImplicitAny”:false,

尝试将
allowJs
放入
tsconfig.json
文件中

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "lib": ["es2015", "dom"],
    "strict": true,
    "esModuleInterop": true,
    "outDir": "dist",
    "allowJs": true 
  }
}
旁白:你的例子是无效的。以下是一个有效的例子:

export default { prop: 'value' }

这是。

你不需要两者都有
“noImplicitAny”:false
足以在导入非类型化JS模块时消除任何警告。在这种特定环境中,团队希望将noImplicitAny设置为true,因此这不是一个选项。对于类型声明文件,如果我将其与foo.js放在同一个文件夹中,Typescript编译器会在没有额外配置的情况下找到它吗?我尝试使用上述代码在foo.js旁边添加foo.d.ts。现在我得到的错误是:
文件“{fileLocation}/foo.d.ts”不是一个模块。
@ShaunLuttin allowJs可以工作。在我的项目中,由于某种原因,我仍然看到VSCode中的导入带有下划线,并带有关于类型声明的警告——但它确实编译(奇怪)。我注意到的另一个问题是,
allowJs:true
declaration:true
不能同时设置。如果删除
声明:true
不是特定项目的选项-还有其他选项吗?GitHub上相关的TypeScript问题中有一些解决方法(例如)。
export default { prop: 'value' }