我正在使用AMD编译而不是打字稿内部模块。
我有一个充满了typescript类和接口的项目,我已经成功地优化成了一个完整的requirejs定义的requirejs文件。
例如
A级{ ... } 出口A;
其他类引用该文件并导入该类。
在另一个项目中,我使用bower引入R.js优化文件并在require_config.js中引用它并加载文件ok。
在这个其他项目中,我希望B类引用A类,但B类不在文件路径中。
我需要做什么?我想我需要生成我在B类中引用的d.ts文件,但是当ClassA不在第二个项目的文件路径中时,如何导入ClassA = require(“ClassA”)。
詹姆斯
答案 0 :(得分:0)
是的,第二个项目可以使用定义文件.d.ts
:
// ---------- projectA.d.ts ----------
declare module "projectA" {
export class A {
// ...
}
}
// ---------- ClassB.ts ----------
import projectA = require("projectA"); // Use the definition in projectA.d.ts
var a = new projectA.A();
请参阅“环境外部模块”部分in the Handbook。
您可以使用dts-generator从projectA自动生成单个定义文件包。
答案 1 :(得分:0)
根据我的评论,当我执行var a = new projectA.A()时,projectA未定义,我发现其原因在于构建了R.js优化文件(projectA.js)的方式 - 它需要将insertRequire添加到R.js构建中。这导致在加载projectA并正确实例化projectA时调用require [" projectA"]。
这里有很多活动部件。遗憾的是打字稿外部模块和内部模块的工作方式不同。取决于语法声明模块" SomeModuleName"和声明模块SomeModuleName通过使用外部和内部模块之间的引号来区分是令人困惑的。
如果语法相同并且编译器-m标志处理所有底层细节,那将是很好的。