【问题标题】:Typescript over Multiple Files多个文件的打字稿
【发布时间】:2015-09-29 04:33:47
【问题描述】:

所以我是一名 C++ 程序员,他在 Dart 中做了一些东西,现在正在过渡到 Typescript。我一次解决一个问题,现在我开始接触到充满类的单个文件。在尝试查找有关此事的信息时,我感到很震惊,因为包含文件的方法如此之多,而且每种方法都非常冗长。事实上,这整个主题仍然处于最前沿,并且正在积极开发中。

所以我没有使用任何外部库,所以内部模块会这样做。但是,当我尝试初始化一个全局变量时,其类在另一个打字稿文件中以相同的模块名称定义,我收到以下错误:

0x800a01bd - JavaScript 运行时错误:对象不支持此操作

查看 StackOverflow 时,我可以找到完全相同的场景: Spanning one Typescript module across files gives 0x800a01bd - JavaScript runtime error: Object doesn't support this action

但是,我是否认为我应该以这样的顺序将每个 .js 文件输入到 html 中,以便解决所有问题?这肯定是不正确的,为什么 Visual Studio 不能为我解析订单并吐出一个 .js 文件?

我尝试设置 Typescript 构建以组合成一个 .js 文件,并在我的 html 中引用该文件。这实际上工作了一次,之后每次都失败了。 (缓存?)显然我一定遗漏了一些东西,所以我想寻求你的帮助。

在 Dart 中这非常简单,但在 typescript 中则非常混乱和麻烦。 AMD、UMD、tsconfig.json 等...作为一个 C++ 人,我喜欢命名空间和包含指令,最重要的是它们很简单,并且在提供您需要的所有功能的同时工作。

那么最相关、最新的处理方式是什么?我在这里遗漏了什么?

【问题讨论】:

    标签: typescript visual-studio-2015


    【解决方案1】:

    因此怀疑在使用多个文件时,您必须将它们输入到您的 HTML 中,以便一切都能解决。 (请不要...)

    当将 JavaScript 输出合并到一个文件中时,请确保选择 ECMAScript 5,而不是 ECMAScript 6,因为那样会崩溃和烧毁。

    同时删除该组合的 Javascript 文件以确保生成一个新文件。您可能还需要做一些清理工作,因为 VS2015 不会为您删除任何 .js 和 .js.map 文件,因此您的目录可能会被无用的文件所占据。

    /更新

    您需要在每次构建时删除生成的组合 Javascript 文件,否则它不会更新...

    【讨论】:

      【解决方案2】:

      我不使用 Visual Studio 2015,但我将描述一种设置命名空间的单文件 TypeScript 项目的简单方法,该项目将使用 tsc 编译。

      在项目的根目录中创建一个tsconfig.json 文件,其中包含:

      {
          "compilerOptions": {
              "target": "es5",
              "out": "SomeNamespace.js"
          }
      }
      

      这将告诉 TypeScript 编译器将目录中带有 .ts 扩展名的所有内容编译到一个名为 SomeNamespace.js 的文件中。

      创建一个名为 Foo.ts 的示例文件,其中包含:

      namespace SomeNamespace {
          export class Foo {}
      }
      

      注意,我使用了namespace 而不是module。内部模块现在称为命名空间,可以使用 namespace 关键字。

      今后,内部模块将被称为“命名空间”。我们之所以选择使用这个术语,是因为这种形式的工作方式与其他语言中的命名空间很接近 [...] http://blogs.msdn.com/b/typescript/archive/2015/07/20/announcing-typescript-1-5.aspx

      创建另一个名为 Bar.ts 的示例文件,其中包含:

      /// <reference path="Foo.ts"/>
      
      namespace SomeNamespace {
          export class Bar {}
      }
      

      这个包含对Foo.ts 的引用。这样可以确保在编译过程中 Foo.ts 中包含的代码在 Bar.ts 之前包含。

      最后,在tsconfig.json文件所在的项目目录下运行tsc,一切都会编译成SomeNamespace.js

      附带说明一下,您可以运行 tsc --watch 让编译器在保存时进行编译。

      【讨论】:

        猜你喜欢
        • 2021-11-18
        • 1970-01-01
        • 2017-12-28
        • 2017-08-19
        • 1970-01-01
        • 1970-01-01
        • 2016-04-01
        • 2017-02-04
        • 2016-08-10
        相关资源
        最近更新 更多