Typescript - RequireJS在require.config中指定路径

时间:2015-05-07 21:09:48

标签: javascript requirejs typescript

我正在现有应用程序中创建一组新的网页。我们开始实现Typescript + RequireJS。

我试图找出如何在使用名称而不是路径的typescript中执行require调用。所有路径都将在require.config

中指定

这里的例子是我的主要内容

require.config({
    baseUrl: '/Scripts/Modules',
    paths: {
    'baseObject' : 'objects/base',
    'inheritedObject' : 'objects/some/other/paths/inheritedObject'
});

这是baseObject.ts:

 class BaseObject {
    initialize(): void {

    }

    fingerprint: string;
}
export = BaseObject;

现在我想在inheritedObject.ts中做的是:

import baseObj = require('baseObject');
class InheritedObject extends baseObj{
  //Object full of stuff
}

由于我在require.config中指定了路径,因此我不想在require调用中使用它。如何只使用提供的字符串(而不是路径!)来获取Typescript?

2 个答案:

答案 0 :(得分:0)

  

我试图找出如何在使用名称而不是路径的typescript中执行require调用

import baseObj = require('baseObject');目前不起作用(免责声明:如果您不想手动创建.d.ts )。您必须使用相对路径。您的IDE可以提供帮助:https://github.com/TypeStrong/atom-typescript#relative-paths

注意:基于这种基于路径的解决方案即将推出:https://github.com/Microsoft/TypeScript/issues/2338

答案 1 :(得分:0)

所以我明白了。这是我做的(特别注意文件名与类名。):

File: /Objects/baseObject.ts
class BaseObject {
    initialize(): void {

    }

    fingerprint: string;
}
export = BaseObject;

接下来我们有:

File:/Objects/Objects.d.ts
import baseObjInstance = require("baseObject");
export module "baseObject"{
   export = baseObjInstance;
}

和实施:

File:/Controllers/baseController.ts

import baseObj = require('baseObject');
class BaseController extends baseObj{
}
export = BaseController;

这似乎允许注册定义,因此在require('baseObject')时,typescript会理解定义。我相信我的require语句是路径,它们只是在本地目录中。这允许我在require配置中指定我的路径,我只需要确保匹配require配置中的模块导出语句。即。

    require.config({
       paths: {
        "baseObject": 'Objects/baseObject'
    }
})

唯一的缺点是我必须为每个对象定义添加一个导出语句。