我正在尝试设置一些"模块"在我的网站的打字稿中,我收到了相互矛盾的信息 - 以及相互矛盾的结果。例如,我有三个"类"。 Prototype
,Item
和Tag
。他们三个都需要有一组特定的属性,所以我决定将它作为基类ComponentModel
,看起来像这样。
module website.admin.components {
export class ComponentModel {
public Components = { // define property };
}
}
现在,我想在其他三个课程中继承这个课程,所以我开始使用'标签'。
module website.admin.viewModels {
export class Tag extends website.admin.components.ComponentModel {
// tag specific properties
constructor() { super(); } // initialize the base class as required
}
}
好的,这似乎有效。但是Prototype
类上的完全相同的代码不起作用;
module website.admin.viewModels {
export class Prototype extends website.admin.components.ComponentModel {
// prototype specific properties
constructor() { super(); }
}
}
这只会导致各种奇怪的行为,并拒绝在运行时工作。我收到以下错误;
未捕获的TypeError:无法读取属性' ComponentModel'未定义的
未捕获的TypeError:无法读取属性'原型'未定义的
未捕获的TypeError:undefined不是函数
任何人都可以帮我弄清楚为什么这样运作?我能做些什么来阻止它?它变得非常恼人。
答案 0 :(得分:4)
您的脚本可能以错误的顺序加载。如果检查捆绑文件,请在使用之前显示依赖项吗?通常他们不会这样做,除非你采取措施确保他们整齐地订购。
如何正确订购?
如果您使用的是ASP.NET MVC捆绑,则可以manually order the bundle。
或者,如果您将///<reference path="...ts" />
引用注释添加到文件中并使用TypeScript编译器上的--out
标志编译为单个文件,只要有sort out the order based on the reference comments,它就会{{3}}没有循环依赖。
如果你想这样做,你仍然可以根据TypeScript为你创建的组合输出进行捆绑和缩小。
答案 1 :(得分:0)
从错误的外观来看,似乎Prototype
类位于不同的文件中,并且没有对包含ComponentModel
类的文件的引用。