在 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-understand-server-versus-local-workspaces.aspx
当您设置本地工作区时,您只会影响您的机器,因此不需要更改 TFS 服务器。
在您的机器中设置本地工作区:
- Visual Studio/文件/源控件/高级/工作区
- 选择一个工作区并点击编辑;
- 在新屏幕中点击
- “高级”将位置更改为“本地”
在这些更改之后,您的所有本地文件都将是可写的,当您再次连接到服务器时,您将能够离线工作而无需使用该解决方案“上线”,因为您的所有本地更改(甚至在 VS 之外)都将是由 TFS 检测到。
您还将 TFS 条目添加到 Windows 资源管理器的上下文菜单中,这会很有帮助。
解决你并不真正需要解决的问题——自动生成定义文件:
你不需要解决这个问题,但要保持与问题的连贯性,也许这对将来遇到这个问题的其他人会有所帮助。
要在保存特定文件时强制执行特定操作,您可以将自定义工具关联到您的文件(Visual Studio/Solution Explorer/Properties (F4)/Custom Tool),然后创建执行 TypeScript 的构建目标编译器生成定义。
类似这样的东西(伪代码,未经测试):
<Target Name="GenerateTypeScriptDeclarationFile">
<Exec Command="tsc --definition @(TypeScriptCompile ->'"%(fullpath)"', ' ')" />
</Target>
有关如何将自定义工具与 TypeScript 和 MSBuild 一起使用的更多详细信息,请参阅我对 this question 的回答。