TypeScript AMD无法使用自定义require.config baseUrl解析外部模块

时间:2014-04-16 13:26:48

标签: visual-studio requirejs typescript amd

我对typescript + requirejs有些麻烦。 我有两个项目(主要项目和单元测试项目)。 它看起来像这样:

solution with two projects
moduleA.ts:

export class A {
    constructor(someThing: string) {
        this.someThing = someThing;
    }
    someThing: string;
}
export var aInst = new A("hello from module A");


moduleB.ts:

import moduleA = require('moduleA');

export class B {
    private a: moduleA.A;

    constructor(a: moduleA.A) {
        this.a = a;
    }

    getSomeThing() {
        return this.a.someThing;
    }
}

export var bInst = new B(moduleA.aInst);


requireConfig.js:

require.config({
    baseUrl: "/app",
});


myTest.ts:

import moduleB = require('moduleB');

QUnit.test('my test', () => {
    QUnit.equal("hello from module A", moduleB.bInst.getSomeThing());
});


testRequreConfig.js:

require.config({
    baseUrl: "../Base/app",
});


index.html的:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">

    <link rel="stylesheet" href="Content/qunit.css" type="text/css" />
    <script type="text/javascript" src="Scripts/qunit.js"></script>

    <script src="Scripts/require.js"></script>
    <script src="test/testRequreConfig.js"></script>
</head>
<body>
    <h1 id="qunit-header">Unit Tests</h1>
    <h2 id="qunit-banner"></h2>
    <h2 id="qunit-userAgent"></h2>
    <ol id="qunit-tests"></ol>
    <div id="qunit-fixture">test markup, will be hidden</div>

    <script type="text/javascript">
        (function () {
            QUnit.config.autostart = false;
            require(['test/myTest.js'], QUnit.start);
        }());
    </script>
</body>
</html>

我们无法更改 Base 项目。 我们希望能够在测试项目中使用 moduleB (由requirejs加载&#39; moduleB&#39;字符串)。 我们有什么:
unable to load
TypeScript编译器无法解析外部模块(因为它不知道在哪里查找它)。 如果我们放

declare module "moduleB" {
 
    export  ...
}


在* .d.ts文件中 - 然后我们就可以使用它了。但是在实际项目中,我们有很多打字稿文件,并且不可能手动编写&#39;声明&#39;对于他们每个人。 有没有办法处理它? 主要问题是我们无法编辑require.config(由于某些原因)。

是否可以让tsc.exe了解require.config?

2 个答案:

答案 0 :(得分:3)

  

是否可以让tsc.exe了解require.config?

不幸的是没有。您的两个选项是创建def以告诉打字稿有关配置或使用完整的相对路径。

答案 1 :(得分:0)

我找到了一个可以帮助你的工作。

我在jquery.d.ts的底部注意到以下代码:

declare module "jquery" {
    export = $;
}
declare var jQuery: JQueryStatic;
declare var $: JQueryStatic;

遇到TypeScript import x=require(<module string>);语句时会找到环境模块声明。

使用此技术,您可以定义类型,然后使用环境模块声明来导出这些类型并在需要中识别。