10

我正在使用 TypeScript 开发 Win8 应用程序。

为了编译我的打字稿代码,我添加winrt.d.tswinjs.d.ts引用了它们:

<reference path="winrt.d.ts" static="true" />
<reference path="winjs.d.ts" static="true" />

编译和构建成功,但 IDE 的智能感知非常慢。我只是打开winrt.d.ts并检查了文件。该文件有 18,770 行,这是一个非常大的文件,可以即时编译。

是否有任何选项或方法可以引用那些巨大的定义文件而无需再次编译lib.d.ts

这种缓慢严重损害了我的 TypeScript 选择。

更新:

在当前的编译器版本(0.8.0)上,没有解决办法。希望在不久的将来的版本中看到最好的性能提升。

更新:

这是我提升开发的简单技巧。表现。我只是创建了winrt.compact.d.ts. 然后只复制实际使用的命名空间的一部分并保存文件。

幸运的是,file( winrt.d.ts) 看起来像是从几个声明文件中生成的。因此,每个命名空间都明显与其他命名空间分开。为 WinRT 制作精简版要容易得多。

4

2 回答 2

2

如果我错了,请纠正我,但我认为lib.d.ts编译器不会以任何特殊方式处理它。我看了一下源代码,这里是处理的片段lib.d.ts

if(this.compilationSettings.useDefaultLib) {
    var compilerFilePath = this.ioHost.getExecutingFilePath();
    var binDirPath = this.ioHost.dirName(compilerFilePath);
    var libStrPath = this.ioHost.resolvePath(binDirPath + "\\lib.d.ts");
    code = new TypeScript.SourceUnit(libStrPath, null);
    this.compilationEnvironment.code.push(code);
}     

如果用户要求lib.d.ts被包含,则只需将其作为要编译的第一段代码添加到编译环境中。所有其他源文件(存储在opts.unnamed以完全相同的方式添加:

for(var i = 0; i < opts.unnamed.length; i++) {
    code = new TypeScript.SourceUnit(opts.unnamed[i], null);
    this.compilationEnvironment.code.push(code);
}  

因此,如果lib.d.ts没有以特殊方式处理,那么对于其他(声明)文件也是不可能的。此外,在我的系统lib.d.ts上有 7,677 行,远低于报告的 18,770 行winrt.d.ts,因此所有行的总和对于编译器而言可能太多,无法达到可接受的速度。

除此之外,我唯一的想法是“其他东西”导致你的机器减速。如果您向我提供库的链接和代码片段,我至少可以测量编译运行在我的系统上需要多长时间。

于 2012-10-16T06:46:14.550 回答
2

目前在 Codeplex 上有一个针对此问题的未完成工作项:

http://typescript.codeplex.com/workitem/265

您目前无法做任何改进(除了给编译器更多的硬件!)但希望工作项将被拾取并且问题将得到解决。

于 2012-10-16T20:16:49.750 回答