Typescript 打字稿;关于“的冲突信息”;“模块”;

Typescript 打字稿;关于“的冲突信息”;“模块”;,typescript,Typescript,我试图为我的站点在typescript中设置一些“模块”,我得到的是相互冲突的信息和相互冲突的结果。例如,我有三个“班”原型,项目和标签。它们都需要有一组特定的属性,所以我决定将其作为基类ComponentModel,如下所示 module website.admin.components { export class ComponentModel { public Components = { // define property }; } } 现在,

我试图为我的站点在typescript中设置一些“模块”,我得到的是相互冲突的信息和相互冲突的结果。例如,我有三个“班”<代码>原型,
项目
标签
。它们都需要有一组特定的属性,所以我决定将其作为基类
ComponentModel
,如下所示

module website.admin.components {
    export class ComponentModel {
    
       public Components = { // define property };
    }
}
现在,我想在其他三个类中继承这个类,所以我从“tags”开始

module website.admin.viewModels {
   export class Tag extends website.admin.components.ComponentModel {
   
      // tag specific properties
      constructor() { super(); } // initialize the base class as required
   }
}
好的,这似乎有效。但是
原型
类上完全相同的代码不起作用

module website.admin.viewModels {
    export class Prototype extends website.admin.components.ComponentModel {
    
        // prototype specific properties
        constructor() { super(); }
    }
}
这只会导致各种奇怪的行为,并拒绝在运行时工作。我得到以下错误

未捕获的TypeError:无法读取未定义的属性“ComponentModel”

未捕获的TypeError:无法读取未定义的属性“prototype”

未捕获类型错误:未定义不是函数


有人能帮我弄清楚为什么会这样吗?我能做些什么来阻止它?它变得非常恼人。

从错误的外观来看,它看起来好像
原型
类位于不同的文件中,并且没有对包含
组件模型
类的文件的引用。

从错误的外观来看,看起来好像
Prototype
类位于不同的文件中,并且没有对包含
ComponentModel
类的文件的引用。

很可能是您的脚本加载顺序错误。如果检查捆绑文件,依赖项是否在使用前显示?通常不会,除非你采取措施确保它们整齐有序

如何正确订购

如果您使用的是ASP.NET MVC绑定,则可以

或者,如果您将
//
引用注释添加到文件中,并使用TypeScript编译器上的
--out
标志编译到单个文件,则只要不存在循环依赖项,它就会被删除


如果您想这样做,您仍然可以根据脚本为您创建的组合输出类型进行捆绑和缩小。

很可能是您的脚本加载顺序错误。如果检查捆绑文件,依赖项是否在使用前显示?通常不会,除非你采取措施确保它们整齐有序

如何正确订购

如果您使用的是ASP.NET MVC绑定,则可以

或者,如果您将
//
引用注释添加到文件中,并使用TypeScript编译器上的
--out
标志编译到单个文件,则只要不存在循环依赖项,它就会被删除



如果愿意,您仍然可以根据TypeScript为您创建的组合输出进行捆绑和缩小。

但是标记文件的方式相同,并且工作正常。为什么Tags.ts文件有效而原型文件无效?因此Tags.ts和Prototype.ts都没有对“componentmodel.ts”的引用?正确。但是对于
Tags.ts
文件,它工作得很好,即使它们都没有任何引用。我假设您在编译期间没有任何错误,并且这是在编译的JavaScript中运行时发生的?这是否正在web应用程序中使用?页面或捆绑包中可能缺少对componentmodel.js的引用?尝试在使用tags.js的页面上查看源代码,并与使用prototype.js的页面进行比较。是的,这只发生在运行时,是的,这是一个web应用程序。没有真正的方法可以让它丢失引用,它是使用ASP.NET捆绑系统将所有文件捆绑在一起,并在那里清楚地显示出来。但是标签文件是相同的方式,并且工作正常。为什么Tags.ts文件有效而原型文件无效?因此Tags.ts和Prototype.ts都没有对“componentmodel.ts”的引用?正确。但是对于
Tags.ts
文件,它工作得很好,即使它们都没有任何引用。我假设您在编译期间没有任何错误,并且这是在编译的JavaScript中运行时发生的?这是否正在web应用程序中使用?页面或捆绑包中可能缺少对componentmodel.js的引用?尝试在使用tags.js的页面上查看源代码,并与使用prototype.js的页面进行比较。是的,这只发生在运行时,是的,这是一个web应用程序。没有真正的方法可以丢失参考,它使用ASP.NET捆绑系统将所有文件捆绑在一起,并清楚地显示在那里。我(显然是错误的)假设typescript使用AMD模块格式来自动确保以正确的顺序加载。如果你想使用AMD,您需要切换到外部模块-您正在使用内部模块。然后使用导入语句,而不是引用注释。老实说,我从来没有遇到过
import
语句工作正常的情况。它总是告诉我
不能将模块声明为非模块类型
。我已经找到了无数关于这个主题的“教程”,但没有一本对我有帮助。我找到的所有东西都假设你的课程都是免费的“根级别”,没有任何名称空间嵌套。为了便于组织,我将我的东西组织到名称空间中,其中许多是嵌套和分类的。“模块”似乎不支持这个概念。我的假设(显然是错误的)是typescript使用AMD模块格式来自动确保以正确的顺序加载。如果你想使用AMD,你需要切换到外部模块-你使用的是内部模块。然后使用导入语句,而不是引用注释。老实说,我从来没有遇到过
import
语句工作正常的情况。它总是告诉我
不能将模块声明为非模块类型
。我找到了无数的“家教”