在 typescript 中,如何使用 es6 语法导入具有默认导出的纯 JavaScript 文件?

Har*_*ins 3 javascript typescript

假设我的打字稿项目中有一个文件,出于某种原因,我希望它只是普通的 JS(对听到好坏的争论不感兴趣)。

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

export default foo = { prop: 'value' }
Run Code Online (Sandbox Code Playgroud)

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

import foo from "./foo";
Run Code Online (Sandbox Code Playgroud)

当我这样做并尝试运行打字稿编译器时,出现以下错误:

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

我已经阅读了一些有关声明文件的文档。在现实世界的例子中,foo 的对象结构并不简单。由于时间原因,我不想定义它的结构只是为了在我的项目中使用它。

有没有一种简单直接的方法可以将此模块声明为任何类型并继续我的一天?

Sha*_*tin 5

尝试放入allowJs您的tsconfig.json文件。

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "lib": ["es2015", "dom"],
    "strict": true,
    "esModuleInterop": true,
    "outDir": "dist",
    "allowJs": true 
  }
}
Run Code Online (Sandbox Code Playgroud)

另外:您的示例默认导出语法无效。这是一个有效的例子:

export default { prop: 'value' }
Run Code Online (Sandbox Code Playgroud)

这是一个有趣的演示