我试图在旧版JS系统的一部分中使用TypeScript。 在此系统中,存在许多在RequireJS环境中执行的应用程序,其中main.js将在启动该应用程序时执行。我创建了这个结构
3.78
模型是生成的代码,必须保留为.JS文件。 不同的.ts模块的'Require'语句应该要求模型。
我知道如何在modules文件夹的Declaration文件中使用这样的东西来编译.ts文件。
App1/
main.js
app.ts
Modules/
myModule.ts
Models/
model1.js
model2.js
但代码不会执行,因为这会为myModule.ts
创建一个这样的AMD模块定义 declare module "Models/model1" { var x:any; export = x;}
但路径由Require.JS解析为
define(["require","exports","Models/model1", function(require,exports,model){ ...
缺少路径部分,因为路径是相对的,并且必须是RequireJS的上下文根的绝对路径。我不能将模型作为TS,因为它们是生成的文件。它们不能仅通过重命名为.ts来编译 由于应用程序在线束,生产和单元测试设置中运行的方式不同,非相对路径也不可用。
问题:有没有办法让TypeScript为JavaScript(.js)模块生成相对路径?
答案 0 :(得分:2)
你有没有看过Triple-Slash Directives?从TypeScript 2.0开始,import "moduleName"
已弃用此版本,但适用于旧版本:
/// <amd-dependency path="x" />
通知编译器非TS 需要在结果模块中注入的模块依赖项 需要打电话。amd-dependency指令也可以有一个可选的name属性; 这允许传递amd依赖的可选名称:
/// <amd-dependency path="legacy/moduleA" name="moduleA"/> declare var moduleA:MyType moduleA.callStuff()
生成的JS代码:
define(["require", "exports", "legacy/moduleA"], function (require, exports, moduleA) { moduleA.callStuff() });