如何为typescript编译器配置`baseUrl`?

THX*_*138 4 typescript

我有一个使用模块构建的网站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文件:

{
  "compilerOptions": {
    "baseUrl": "./modules"
  }
}
Run Code Online (Sandbox Code Playgroud)

现在可以在./modules/moduleA中查找导入到"moduleA"的内容

import A from "moduleA";
Run Code Online (Sandbox Code Playgroud)

旁注:许多开发人员依赖gulp或类似工具来编译typescript,而不是直接使用typescript编译器.如果您依赖其中一个工具,则必须确保您的工具从tsconfig.json中获取这些新选项,如baseUrl,并将其传递给typescript编译器.