gpt4 book ai didi

javascript - 使用 RequireJS 2.1 的 AMD 样式模块中的 TypeScript 1.8 相对模块名称解析

转载 作者:行者123 更新时间:2023-11-30 15:43:03 24 4
gpt4 key购买 nike

我正在尝试在遗留 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

缺少路径部分,因为路径是相对的,必须是 RequireJS 上下文根的绝对路径。我不能将模型作为 TS,因为它们是生成的文件。他们不只是通过重命名为 .ts 来编译由于应用程序在线束、生产和单元测试设置中运行的方式不同,因此非相对路径也不可用。

问题:有没有办法让 TypeScript 为 JavaScript (.js) 模块生成相对路径?

最佳答案

你看过Triple-Slash Directives了吗? ?从 TypeScript 2.0 开始,这已被弃用 import "moduleName"但应该适用于旧版本:

/// <amd-dependency path="x" /> informs the compiler about a non-TS module dependency that needs to be injected in the resulting module’s require call.

The amd-dependency directive can also have an optional name property; this allows passing an optional name for an amd-dependency:

/// <amd-dependency path="legacy/moduleA" name="moduleA"/>
declare var moduleA:MyType
moduleA.callStuff()

Generated JS code:

define(["require", "exports", "legacy/moduleA"], function (require, exports, moduleA) {
moduleA.callStuff()
});

关于javascript - 使用 RequireJS 2.1 的 AMD 样式模块中的 TypeScript 1.8 相对模块名称解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40479070/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com