我有一个使用模块构建的网站requireJS.我想在这个项目上开始使用TypeScript(1.8,Visual Studio 2015),并尝试重写其中一个模块.
目前我的模块如下:
// file: ProjectFoo/app/dashboard/viewProfile.js
define(["services/datasvc"], function (datasvc) {
datasvc.getData(...).then(...);
});
Run Code Online (Sandbox Code Playgroud)
文件datasvc.js位于以下路径:ProjectFoo/services/datasvc.js
为了使datasvc.jsrequireJS 可以访问,我已经配置了以下路径(requireJS配置):
services - > ./services
重写我的模块后,我使用以下构造导入datasvc(注意:TypeScript编译器配置为使用amd模块结构).
import * as datasvc from "services/datasvc";
Run Code Online (Sandbox Code Playgroud)
但是这不起作用,因为TypeScript将其services/datasvc视为相对于当前文件的路径.但是,如果我按如下方式重写该import语句,那么TypeScript [compiler]会成功:
import * as datasvc from "../../services/datasvc";
Run Code Online (Sandbox Code Playgroud)
然而,这导致datasvc使用相对路径导入,即生成代码看起来像:
define(["require", "exports", "../../services/datasvc"]...
Run Code Online (Sandbox Code Playgroud)
这里的问题是我将不得不更改../要包含在模块路径中的数量,具体取决于我所在文件的嵌套深度.
问题:
有没有办法使用import * as datasvc from "services/datasvc"和以某种方式配置TypeScript来处理requireJS的相同方式?
ben*_*ben 15
您需要使用typescript 2.0或更高版本来配置基本URL.
如发行说明中所述,您可以使用以下内容创建tsconfig.json文件:
Run Code Online (Sandbox Code Playgroud){ "compilerOptions": { "baseUrl": "./modules" } }现在可以在./modules/moduleA中查找导入到"moduleA"的内容
Run Code Online (Sandbox Code Playgroud)import A from "moduleA";
旁注:许多开发人员依赖gulp或类似工具来编译typescript,而不是直接使用typescript编译器.如果您依赖其中一个工具,则必须确保您的工具从tsconfig.json中获取这些新选项,如baseUrl,并将其传递给typescript编译器.
| 归档时间: |
|
| 查看次数: |
18185 次 |
| 最近记录: |