我在使用 TypeScript + RequireJS 时遇到了一些问题。
我有两个项目(主要项目和单元测试项目)。
它看起来像这样:
moduleA.ts:(接下来应该是代码示例,但未提供)
我们无法改变“基础”项目。 我们希望能够在“测试”项目中使用“moduleB”(通过'requirejs'按'moduleB'字符串加载)。 我们拥有:
TypeScript编译器无法解析外部模块(因为它不知道在哪里查找它)。 如果我们放置:
在*.d.ts文件中声明 - 然后我们就能够使用它。但在实际项目中,我们有很多TypeScript文件,不可能为每个文件手动编写'declare'。 有没有处理它的方法? 主要问题是事实上,由于某些原因,我们无法编辑require.config。
是否有可能让tsc.exe了解require.config?
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>
我们无法改变“基础”项目。 我们希望能够在“测试”项目中使用“moduleB”(通过'requirejs'按'moduleB'字符串加载)。 我们拥有:
![unable to load](https://istack.dev59.com/l6Ill.webp)
TypeScript编译器无法解析外部模块(因为它不知道在哪里查找它)。 如果我们放置:
declare module "moduleB" {
export ...
}
在*.d.ts文件中声明 - 然后我们就能够使用它。但在实际项目中,我们有很多TypeScript文件,不可能为每个文件手动编写'declare'。 有没有处理它的方法? 主要问题是事实上,由于某些原因,我们无法编辑require.config。
是否有可能让tsc.exe了解require.config?