Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Typescript编译器忘记向ES6模块导入添加文件扩展名了吗?_Javascript_Typescript_Ecmascript 6_Es6 Modules - Fatal编程技术网

Javascript Typescript编译器忘记向ES6模块导入添加文件扩展名了吗?

Javascript Typescript编译器忘记向ES6模块导入添加文件扩展名了吗?,javascript,typescript,ecmascript-6,es6-modules,Javascript,Typescript,Ecmascript 6,Es6 Modules,我正试图用ES6模块解析将一个Typescript项目编译成JS,但似乎有些不对劲 我的tsconfig.json如下所示: { "compilerOptions": { "module": "es6", "target": "es6", "sourceMap": true, "lib": ["es6"] } } 我用两个模块构建了一个简单的测试用例。第一个模块(module1.ts)仅导出一个常量: export const testText =

我正试图用ES6模块解析将一个Typescript项目编译成JS,但似乎有些不对劲

我的tsconfig.json如下所示:

{
    "compilerOptions": {
    "module": "es6",
    "target": "es6",
    "sourceMap": true,
    "lib": ["es6"]
  }
}
我用两个模块构建了一个简单的测试用例。第一个模块(module1.ts)仅导出一个常量:

export const testText = "It works!";
第二个模块(main.ts)只是从第一个模块导入导出:

import { testText } from 'module1';
alert(testText);
第二个模块(main.js)的输出文件包含在my index.html中,带有
type=“module”
-属性:

<script src="main.js" type="module"></script>

当我使用Firefox(
dom.moduleScripts.enabled
在about:config中设置)和Chrome Canary(设置了实验性Web平台标志)进行测试时。在这两种情况下,它都不起作用

Typescript编译器似乎从'module1'传输TS
import{testText}
-从'module1'导入{testText}到JS语句的语句
import。(注:两者完全相同)

正确的ES6导入声明应为:
从'module1.js'导入{testText}
(注意.js文件扩展名)
如果我手动将文件扩展名添加到生成的代码中,它就会工作

我是否做错了什么,或者Typescript
“模块”:“es6”
设置是否无法正常工作? 是否有一种方法可以配置tsc,使.js文件扩展名添加到生成的导入语句中?

这是一种简单的方法

短期内,您可以通过指定输出文件来解决此问题:

main.ts
中指定
.js
扩展名和路径:

import { testText } from './module1.js';
alert(testText);
这将正确拾取
module.ts
,但输出时包含
.js
扩展名


请注意,您还需要在本地文件前面加上
/
,因为“裸”模块名称保留供将来使用。

Keith回答正确

在你的主要演讲中

而不是

import { testText } from 'module1';
试试下面的方法

import { testText } from 'module1.js';

在我的例子中,vscode intellisense工作+我也得到了所需的输出文件main.js。

这是一个已知的问题,报告为,我正在解决相同的问题。导入
*.js
文件是一个很好的解决方法,但是我在IDE中遇到了重构问题(使用CLion)和声明、定义等。因此我切换回导入而不使用
*.js
扩展,实际上我使用SystemJS来传输ES6 JavaScript(作为开发期间的临时解决方案)。我找到了有关使用TypeScript编译器的信息。考虑为这种情况使用“定制”构建工具,但实际上我很忙。如果有人有一些想法、笔记或类似于针对这种糟糕的TS bug的叛逆智能解决方案;)谢谢因“按预期工作”而关闭。所以这是一个错误功能而不是一个bug?回答得好,只想提到
baseUrl
属性作为一个tsconfig选项添加到了typescript v3.5中。如果你把它设置到你的所有类型的源文件的根目录,你就可以省去<本地输入的代码> > /<代码>没有更新。@ MuHMMayAdoo-不幸的是,更新是TypeScript团队认为这是“按预期的工作”,不会改变行为。