Javascript 扩展类时的Typescript文件顺序问题

Javascript 扩展类时的Typescript文件顺序问题,javascript,typescript,visual-studio-2015,Javascript,Typescript,Visual Studio 2015,我使用TypeScript定义模型,在扩展类时遇到了一个问题。我有两个类,每个类在一个同名的代码文件中: class kanine { name = 'dog' } 及 在解决方案中,它们显示为: 当我运行应用程序时,出现以下错误: 但是,当我将包含kanine类的代码文件从kanine.ts重命名为1kanine.ts时,我没有得到错误。另一个解决方法是像这样捆绑它们: .Include("~/app/kanine.js") .Include("~/app/beagle.js"

我使用TypeScript定义模型,在扩展类时遇到了一个问题。我有两个类,每个类在一个同名的代码文件中:

class kanine {
     name = 'dog'
}

在解决方案中,它们显示为:

当我运行应用程序时,出现以下错误:

但是,当我将包含kanine类的代码文件从kanine.ts重命名为1kanine.ts时,我没有得到错误。另一个解决方法是像这样捆绑它们:

.Include("~/app/kanine.js")
.Include("~/app/beagle.js")
.IncludeDirectory("~/app", "*.js")
而不是像这样:

.Include("~/app/kanine.js")
.Include("~/app/beagle.js")
.IncludeDirectory("~/app", "*.js")

有没有一种方法可以按显式顺序处理文件而不必单独包含它们?

之所以会出现这种情况,是因为在解析器到达beagle之前需要定义基类kanine

您可以通过以下两种方式之一修复此问题:

  • 继续明确定义每个.js文件的顺序,就像您目前在第一个示例中所做的那样

  • 使用tsconfig.json或通过项目属性更改编译设置,以便将.ts文件合并到单个.js文件中,并依靠typescript编译器对其进行正确排序

  • 如果选择选项2,则需要使用///reference标记来帮助编译器确定应该首先输出哪个文件。这与将其添加到beagle.ts一样简单:

    /// <reference path="kanine.ts" />
    
    //
    

    这将确保在beagle.ts文件之前输出kanines javascript。

    我将///添加到beagle.ts文件中,但仍然会出现“Uncaught”错误。是否需要设置一些项目级配置以使用这些标记?我想这可能取决于您是如何编译应用程序的。这是“带有TypeScript的HTML应用程序”吗?您是否有tsconfig.json,或者您是否进入项目属性并将TypeScript构建设置为“将JavaScript输出合并到文件中?”?我没有使用tsconfig.json文件,并且我没有更改web属性的TypeScript构建区域中的任何默认设置。我知道发生了什么。您或者需要像在第一个示例中那样显式定义依赖项的顺序,或者需要使用tsconfig或project属性将这两个ts文件组合成一个文件,并使用///引用来定义顺序,就像我在示例中所做的那样。我编辑了我的答案,以更准确地反映解决方案。