上下文
我们将当前项目(TypeScript + RequireJS)拆分为单独的模块(核心,widget1,...)。我们正在运行TypeScript的0.8.1.1版本。TypeScript:扩展一个已经通过require加载的类
每个模块都构建为一个文件,并且核心将在最初加载。这些小部件将被延迟加载,只在需要的情况下,但我想确保这些小部件可以引用我的核心模块(但是而不是在其输出中包含该模块)。
要编译打字稿到AMD模块时澄清,import
语句会被编译成模块的功能define
的依赖性阵列。例如:
打字稿
import coreModule = module("core");
的JavaScript输出(与AMD标志)
define(['require', 'exports', 'core'], function(require, exports, __CoreModule__){
var coreModule = __CoreModule__;
});
这正是我想避免的。
因此,我打算用var someCoreModule = require("core/...");
替换所有import someCoreModule = module("core/...");
陈述。
我现在面临的问题是一些这些核心模块正在返回其可以通过微件被扩展的基类。由于打字稿的命名空间,这意味着我需要延长这些如下:
import baseClass = module("core/SomeBaseClass");
class Child extends baseClass.Base {
}
而且ofcourse我有require
一个替换import
语句时仍然需要此相同的语法:
var baseClass = require("core/SomeBaseClass");
class Child extends baseClass.Base {
}
这显然会导致关于缺少类型(基本)的错误。我目前计划通过提供基类的存根实现来规避这个错误。如下:
declare module baseClass {
class Base {
}
}
var baseClass = require("core/SomeBaseClass");
class Child extends baseClass.Base {
}
虽然这个工程,我觉得这相当丑陋的样子。我需要能够延长课程,因为我需要拨打super
。这意味着我无法使用界面来键入所需的模块。
有没有人知道更好的解决方案,还是我被迫用这种方式解决我的问题?
一如既往,任何帮助非常感谢!
在你的例子中,编译的'CompilationService.js'正在做我想避免的:)它编译定义调用的依赖数组中的'EditorPosition'的输入? – thomaux 2013-04-23 13:52:14
我以为你试图避免///引入整个文件*的问题的引用风格。任何你不希望它在主要定义调用中的原因?延迟加载? – basarat 2013-04-23 13:58:14
是的,我只想在需要的时候才加载文件:) – thomaux 2013-04-23 14:01:46