【问题标题】:How to use separate files for classes in typescript?如何在打字稿中为类使用单独的文件?
【发布时间】:2015-11-23 23:04:11
【问题描述】:

我正在研究如何构建一个打字稿应用程序,其中所有类都保存在单独的 .ts 文件中。我正在使用 VS 代码。编译任务似乎工作正常(.ts 文件被转译为 .js 文件),但是当我将 main.js 文件加载到我的 HTML 页面中时,我收到了这个 javascript 错误:

Can't find variable: require

我的打字稿代码:

// __________ car.ts __________ 
class Car {
    color: string;

    constructor(color: string) {
        this.color = color;
        console.log("created a new " + color + " car");
    }
}
export = Car;

// __________ main.ts __________ 
import Car = require('car');

class Startup {
    public static main(): number {
        console.log('Hello World');
        var c = new Car("red");
        return 0;
    }
}

我的 tsconfig 文件:

{
    "compilerOptions": {
        "module": "commonjs",
        "sourceMap":  true
    },
     "files": [
        "car.ts",
        "main.ts"
    ]
}

我在这里缺少什么步骤?为什么 javascript 需要一个叫做 'require' 的东西?还是有其他方法可以处理单独文件中的类?

【问题讨论】:

  • 您需要安装require 库。这是 node.js 的一部分。
  • 那么不要使用 ES6 模块。使用内部模块/命名空间。

标签: typescript commonjs


【解决方案1】:

require 函数是 NodeJS 的 part。为了使require在浏览器中工作,您需要安装requirejs

如果您想使用内部模块,请将outFile 添加到您的tsconfig.json

{
    "compilerOptions": {
        "module": "commonjs",
        "sourceMap":  true,
        "outFile": "app.js"
    },
     "files": [
        "car.ts",
        "main.ts"
    ]
}

并在您的index.html 文件中添加<script src="app.js"></script>

【讨论】:

  • 我最初的目标是将类拆分为单独的 .ts 文件。我真的不想安装另一个依赖项。有没有更简单的方法来处理文件中分隔的代码?
  • typescriptlang.org/Handbook#modules-splitting-across-files - 用于内部模块。 TypeScript 也有一些外部模块,但尽管很多人建议我不觉得它们对浏览器有那么好。
  • 还是同样的问题。当我在 Car 类周围添加“模块 Vehicles”,然后尝试从另一个 .ts 文件实例化新的 Vehicle.Car() 时,编辑器抱怨“Vehicle”未知。
  • 您需要确保您的.ts 文件位于tsconfig.json 中,并且您通过注释/// <reference path="relative/path/to/vehicle.ts" /> 引用该文件。
  • 您还应该添加outFile(请参阅我的回答)并且您不需要任何import 命令。
【解决方案2】:

编辑:TypeScript-Handbook: Splitting Across Files

要在编码时相互引用文件,请在每个文件的最顶部使用///<reference path="someOtherScript.ts" />

首先,我们可以使用--out 标志使用串联输出,将所有输入文件编译为单个 JavaScript 输出文件: tsc --out sample.js Test.ts

"outFile": "app.js" 放入"compilerOptions": {


您可以将所有.ts 文件编译到一个.js 文件中。这就是我一直在使用的。一个 JS 文件但干净的 TypeScript 代码。

在 Visual Studio 中,它是 <TypeScriptOutFile>myfile.js</TypeScriptOutFile>。在 Visual Code 中可能类似?

【讨论】:

  • 是的,但随后 TS 编辑器抱怨“汽车”未知。只有在 javascript 中才知道“汽车”,因为所有文件都被编译成一个文件。
  • 好的等等,解决办法是……引用:///<reference path="someOtherScript.ts" />
  • 你把这条线放在哪里?在 VS Code 中,这似乎是不允许的(整行用红色下划线)
  • 在每个文件的最顶部,看我的回答
  • 这里不需要导入。您是否已将其配置为在一个 JavaScript 文件中输出?我在答案中添加了一些额外的信息
猜你喜欢
  • 2016-02-16
  • 2015-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-13
  • 1970-01-01
  • 2021-09-14
  • 2018-04-14
相关资源
最近更新 更多