在typescript中,如何使用es6语法导入带有默认导出的普通javascript文件?
假设我在我的typescript项目中有一个文件,出于某些原因,我希望它只是简单的JS(不想听到关于它是好是坏的原因的争论) 示例Javascript文件(名为foo.js): 使用上述Javascript文件的同一文件夹中的Typescript文件在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”类型
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' }