我们目前正在评估Typescript,整体印象非常好!
我们也在使用Webessentials,并选中了将所有创建的文件添加到TFS的选项。但现在我们遇到了一个问题。
如果我们有一个引用'class2.ts'(/// <reference path="class2.ts" />
)的Typescript文件'class1.ts',我在保存class1.ts时会收到错误“无法写入文件class2.js”。显然编译器会尝试编译class1 和引用的class2,但只检查class1.ts。
对此最好的解决方法可能是引用class.d.ts而不是class2.ts但我找不到一种方法来自动创建保存定义文件。
有没有办法实现这个目标?
答案 0 :(得分:2)
在TFS环境中开始使用TypeScript时遇到了同样的问题。 虽然您的问题是要求在保存时自动生成定义文件,但您真正的问题与TFS有关。
解决您的真正问题:
默认情况下,TFS与服务器工作区一起使用,这意味着对本地文件的任何编辑都需要在服务器上执行签出。因此,所有本地文件都被锁定,需要明确签出。如果您打开文件并对其进行编辑,Visual Studio会自动为您执行此操作,但对于未直接编辑的引用文件,Visual Studio将不会这样做。
解决方案是将TFS配置为与本地工作区配合使用,您可以为其提供其他好处,例如不在“待更改”中包含重新创建的.js文件,而不会对其内容进行任何更改。< / p>
我建议阅读这篇简单的文章,比较本地和服务器工作区非常清楚: http://blogs.msdn.com/b/willy-peter_schaub/archive/2011/11/30/team-foundation-server-trying-to-understand-server-versus-local-workspaces.aspx
设置本地工作区时,只影响您的计算机,因此不需要对TFS服务器进行任何更改。
在您的机器中设置本地工作区:
在这些更改之后,所有本地文件都可写,您将能够脱机工作,而无需再次连接到服务器时使用解决方案“联机”,因为所有本地更改(甚至在VS之外)都将是由TFS检测到。 您还将在Windows资源管理器中的上下文菜单中添加TFS条目,这些条目可能会有所帮助。
解决您不需要解决的问题 - 自动生成定义文件:
你不需要解决这个问题,而是要与问题保持一致,这可能会对将来提出这个问题的其他人有所帮助。
要在保存特定文件时强制执行某个操作,您可以将自定义工具与文件关联(Visual Studio /解决方案资源管理器/属性(F4)/自定义工具),然后创建执行TypeScript的构建目标编译器生成定义。
像这样(伪代码,未经过测试):
<Target Name="GenerateTypeScriptDeclarationFile">
<Exec Command="tsc --definition @(TypeScriptCompile ->'"%(fullpath)"', ' ')" />
</Target>
有关如何将自定义工具与TypeScript和MSBuild一起使用的更多详细信息,请参阅我对this question的回答。
答案 1 :(得分: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,
}
}
},
...
});