我正在尝试在遗留JS系统的一部分中使用TypeScript。在这个系统中,许多应用程序在RequireJS环境中执行,当应用程序启动时,main.js将执行。我创建了这个结构
App1/
main.js
app.ts
Modules/
myModule.ts
Models/
model1.js
model2.js
模型是生成的代码,必须保留为. js文件。在不同的.ts模块中,应该通过Require语句来要求模型。
我知道如何在模块文件夹中的声明文件中使用这样的东西来让.ts文件编译。
declare module "Models/model1" { var x:any; export = x;}
但是代码不会执行,因为这会为myModule.ts创建一个AMD模块定义
define(["require","exports","Models/model1", function(require,exports,model){ ...
但是路径被Require.JS解析为
http://mysite/Models/model1.js
缺少路径部分,因为path是相对的,必须是RequireJS上下文根的绝对值。我不能有模型作为TS,因为它们是生成的文件。它们不会仅仅通过重命名为.ts来编译此外,由于应用程序在控制、生产和单元测试设置中的运行方式不同,非相对路径也不可用。
问题:是否有办法让TypeScript为JavaScript (.js)模块生成相对路径?
你看过三斜杠指令吗?从TypeScript 2.0开始,import "moduleName"
已经弃用了这个功能,但应该可以在旧版本中使用:
/// <amd-dependency path="x" />
通知编译器有关非ts的信息需要在结果模块中注入的模块依赖项需要调用。adm -dependency指令也可以有一个可选的name属性;这允许为adm依赖项传递一个可选的名称:
生成的JS代码:/// <amd-dependency path="legacy/moduleA" name="moduleA"/> declare var moduleA:MyType moduleA.callStuff()
define(["require", "exports", "legacy/moduleA"], function (require, exports, moduleA) { moduleA.callStuff() });