0

我们目前正在评估 Typescript,总体印象真的非常好!我们也在使用 Webessentials,并选中了将所有创建的文件添加到 TFS 的选项。但是现在我们遇到了一个问题。如果我们有一个引用 'class2.ts' (by /// <reference path="class2.ts" />) 的 Typescript 文件 'class1.ts',我在保存 class1.ts 时会收到错误消息“无法写入文件 class2.js”。显然,编译器试图编译 class1引用的 class2,但只有 class1.ts 被检出。

最好的解决方法可能是引用 class.d.ts 而不是 class2.ts 但我无法找到一种在保存时自动创建定义文件的方法。

有没有办法做到这一点?

4

2 回答 2

2

在 TFS 环境中开始使用 TypeScript 时,我遇到了同样的问题。尽管您的问题是寻求一种在保存时自动生成定义文件的方法,但您真正的问题与 TFS 有关。

解决您的实际问题:

默认情况下,TFS 与服务器工作区一起使用,这意味着对本地文件的任何编辑都需要在服务器上执行签出。因此,所有本地文件都被锁定,需要显式签出。如果您打开文件并对其进行编辑,Visual Studio 会自动为您执行此操作,但不会对未直接编辑的引用文件执行此操作。

解决方案是将 TFS 配置为与本地工作区一起使用,您可以为您提供其他好处,例如不包括在“待定更改”中的 .js 文件,该文件是在其内容没有任何更改的情况下重新创建的。

我建议阅读这篇简单的文章,它非常清楚地比较本地与服务器工作空间:http: //blogs.msdn.com/b/willy-peter_schaub/archive/2011/11/30/team-foundation-server-trying-to -了解服务器与本地工作空间.aspx

当您设置本地工作区时,您只会影响您的机器,因此不需要更改 TFS 服务器。

要在您的机器中设置本地工作区:

  1. Visual Studio/文件/源控件/高级/工作区
  2. 选择一个工作区,点击编辑;
  3. 在新屏幕中单击
  4. “高级”将位置更改为“本地”</li>

TFS 设置本地工作区

在这些更改之后,您的所有本地文件都将可写,当您再次连接到服务器时,您将能够离线工作而无需使用该解决方案“上线”,因为 TFS 将检测到您的所有本地更改(甚至在 VS 之外) . 您还将在 Windows 资源管理器的上下文菜单中添加 TFS 条目,这会很有帮助。

解决您并不真正需要解决的问题 - 自动生成定义文件:

您不需要解决这个问题,但要与问题保持一致,也许这对将来遇到这个问题的其他人会有所帮助。

要在保存特定文件时强制执行某个操作,您可以将自定义工具关联到您的文件(Visual Studio/Solution Explorer/Properties (F4)/Custom Tool),然后创建执行 TypeScript 编译器以生成的构建目标定义。

像这样的东西(伪代码,未经测试):

<Target Name="GenerateTypeScriptDeclarationFile">
  <Exec Command="tsc --definition @(TypeScriptCompile ->'&quot;%(fullpath)&quot;', ' ')" />
</Target>

有关如何将自定义工具与 TypeScript 和 MSBuild 一起使用的更多详细信息,请参阅我对此问题的回答。

于 2013-06-12T10:37:37.950 回答
0

保存 class1.ts 时出现错误“无法写入文件 class2.js”。显然编译器试图编译 class1 和引用的 class2 但只有 class1.ts 被检出

我在这里的建议也是检查 class2.ts。

如果您仍然希望为您的文件自动生成 .d.ts,您可以使用 grunt 任务: https ://npmjs.org/package/grunt-typescript

grunt.initConfig({
    ...
    typescript: {
      base: {
        src: ['path/to/typescript/files/**/*.ts'],
        dest: 'where/you/want/your/js/files',
        options: {             
          declaration: true,
        }
      }
    },
    ...
});
于 2013-06-11T21:43:46.400 回答