//Widget.module.ts
/// <reference path="Buttons.ts" /> export module Widget { class Widget { } }
//Buttons.ts
/// <reference path="Widget.module.ts" /> class Button extends Widget{ function x(){ ... } ... }
在这个安排中,我希望有一个主文件定义一个模块,然后从该主文件中引用一些文件.这些文件可能包含许多相互调用,实例化或继承的类.
目前我在源Buttons.ts中包含“extends Widget”的行上收到此错误 – 我是否包含在导出的模块中.
Could not file symbol widget
–Update–
我想使用引用标记而不是import / require的原因是我想使用typescript编译器中的–out标志将这些单独的Typescript文件编译成单个javascript文件.
我假设你的两个文件在同一个文件夹中?从当前的代码中,我无法理解为什么你想在Widget.module.ts文件中引用Button.ts,但这不是重点.
您没有包含Widget.module文件,您只是引用它.引用TypeScript文件只能用于类型声明,而不能用于实现.
将您的代码更改为:
import Widget = require("Widget.module"); class Button extends Widget.Widget { x() { // ... } // ... }
请注意,在导出模块时,需要将类引用为Widget.Widget,而不是类.此外,如果您正在构建Web应用程序,则需要在小部件模块中加载模块加载器.在那种情况下,看看RequireJS.
更新:
参考标记的好处是您可以引用类型而无需导入它们.这可能很有用
>如果您想在TypeScript代码中使用现有的JavaScript库
>或为您自己的代码.
在后一种情况下,假设您有其他代码要求变量属于Button类型,但实际上并不需要类本身.
class MyClassThatReferencesButtonButDoesNotActuallyNeedsTheImplementation { myMethodThatExpectsAButton(someVar:Button) { someVar.text = "My button!"; } }
该类不需要Button的实现,只需要知道它上面有哪些属性和方法.当您了解在导入而不是引用Button时,优势变得更加清晰,它需要由JavaScript模块加载器加载.
在第一种情况下,假设你的Button类需要jQuery.你打算和你的班级一起包括jQuery吗?或者你会认为这是全球可用的?本质上,这与上面的情况相同:您不需要jQuery的TypeScript实现,您只需要知道可用的属性和方法,因此您只需引用jQuery的定义文件.
–out标志仅对包含引用的文件有用.如果您已导入模块,则需要编译所有文件,然后使用RequireJS优化器将输出构建为单个文件.