我有一个使用requireJS
的模块构建的网站。我想在这个项目上开始使用TypeScript(1.8,Visual Studio 2015),并尝试重写其中一个模块。
目前我的模块如下:
// file: ProjectFoo/app/dashboard/viewProfile.js
define(["services/datasvc"], function (datasvc) {
datasvc.getData(...).then(...);
});
文件datasvc.js
位于以下路径:ProjectFoo/services/datasvc.js
要使{J}可以访问{J},我已配置了以下路径(requireJS配置):
datasvc.js
- > services
重写我的模块后,我使用以下构造导入./services
(注意:TypeScript编译器配置为使用datasvc
模块结构。)
amd
但是这不起作用,因为TypeScript将import * as datasvc from "services/datasvc";
视为相对于当前文件的路径。但是,如果我按如下方式重写该import语句,则TypeScript [compiler]成功:
services/datasvc
然而,这会导致import * as datasvc from "../../services/datasvc";
使用相对路径导入,即生成代码如下所示:
datasvc
这里的问题是我必须更改define(["require", "exports", "../../services/datasvc"]...
的数量以包含在模块路径中,具体取决于我所在文件的嵌套深度。
问题:
有没有办法使用../
并以某种方式配置TypeScript来处理requireJS的相同方式?
答案 0 :(得分:13)
You'll need typescript 2.0 or above in order to configure a base url.
如发行说明中所述,您可以创建一个包含以下内容的tsconfig.json文件:
{ "compilerOptions": { "baseUrl": "./modules" } }
现在可以在./modules/moduleA
中查找导入到“moduleA”的内容import A from "moduleA";
附注:许多开发人员依赖gulp或类似工具来编译typescript,而不是直接使用typescript编译器。如果您依赖其中一个工具,则必须确保您的工具从tsconfig.json中获取这些新选项,如baseUrl,并将其传递给typescript编译器。