【问题标题】:TypeScript compiler creates empty JavaScript file in WebStormTypeScript 编译器在 WebStorm 中创建空的 JavaScript 文件
【发布时间】:2016-08-15 02:22:05
【问题描述】:

这是我对 TypeScript 的初步体验。我采用了一个由两个文件组成的简单 JavaScript 应用程序并将它们转换为 TypeScript。

一个文件accounts.ts 包含主要代码,另一个文件fiat.ts 是导出模块Fiat 和一些导出成员的支持文件。经过一些编辑后,我不再收到来自 TypeScript 编译器的错误消息。

我使用tsconfig.json文件来控制编译:

{
  "compilerOptions": {
    "module": "commonjs",
    "noImplicitAny": true,
    "removeComments": true,
    "preserveConstEnums": true,
    "outFile": "main.js",
    "target": "ES5",
    "sourceMap": true
  },
  "files": [
    "accounts.ts",
    "fiat.ts"
  ]
}

它应该创建一个包含代码的main.js 文件。但是编译成功后只包含一行:

//# sourceMappingURL=main.js.map

不包含其他代码。我偶然发现如果我删除线

import {Fiat} from './fiat';

accounts.ts 文件中,编译器将accounts.ts 的代码包含在main.js 中,但不包含fiat.ts 的代码,此外,TypeScript 编译器在accounts.ts 中为每个对Fiat 的引用显示错误消息.

我不知道如何仅从两个 TypeScript 文件创建 JavaScript 文件。任何帮助将不胜感激!


我在研究后发现:Typescript 模块概念可以通过两种不同的方式处理:内部模块和外部模块。我的困难来自于没有真正理解这一点。外部模块与动态模块加载器一起工作。你import他们。只有内部模块可以集中到一个(或多个)Javascript 文件中,这些文件通过script 标签与 HTML 一起加载。要使用内部模块,您需要在引用它们的文件中使用/// <reference path="./name.ts" /> 行。据我所知,内部和外部模块之间的其他语法差异很小。

【问题讨论】:

标签: javascript typescript webstorm


【解决方案1】:

如果您想使用模块(外部模块)并将它们编译到单个文件中,您应该在 tsconfig.json 中将module 设置为目标amdsystem(假设您有1.8 typescript)。

通过删除导入/导出,您不使用模块,因此 outFile 有效。

【讨论】:

  • 是的,我看到某处解释并尝试了这个。它会导致 Javascript 代码无法执行。使用“amd”选项,我在浏览器控制台中收到“未定义定义”和“系统”错误“未定义系统”。
  • 你用的是什么加载器?
  • 记住浏览器还没有加载模块的能力——你需要使用像 systemjs、requirejs 等这样的模块
  • 让我感到困惑的是,我首先创建了带有模块的“fiat.ts”,然后在 Javascript 版本的“accounts.js”中使用它。这就像一个魅力。我不需要模块加载器,我只是在网页中包含了生成的“fiat.js”,它就可以使用了。为什么这不适用于另一个甚至不包含模块而只是更新的 Javascript 版本的 Typescript 文件?这很奇怪。使用第二个 Typescript 文件,转译器开始生成不同的代码。
  • 由于 tsc 是 bild,它不起作用。如果目标是 commonjs 并且您正在使用多个文件和 outFile 选项,则 tsc 不会发出代码。一般来说,模块并不意味着只能与一个文件一起使用。
猜你喜欢
  • 1970-01-01
  • 2017-01-15
  • 1970-01-01
  • 2016-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-16
  • 2015-02-02
相关资源
最近更新 更多