我正在使用VS 2015和Chrome来开发我的网络应用程序。我的客户端JavaScript代码是用TypeScript编写的。编译.ts文件时,VS也会生成相应的.map文件。 (在项目中,我始终将我的.ts和.map文件标记为内容,以便在客户请求任何内容时提供。当然我要改变这种做法在发布中。)
在Chrome开发工具(F12)中调试客户端代码时,Chrome会自动检测/接受特定.js文件的.ts和.map文件。这是所以集成,所以我无法在我的.js中设置断点,因为当我尝试它时,Chrome会自动切换到相应的.ts并将断点设置为相应的那里。
到目前为止这很好,那么问题是什么呢?好吧,当在.ts文件中调试时,TypeScript类中的所有成员变量都显示为undefined。 (它们不是)这些变量是根据TypeScript语法(如this.myMember
)访问的,所以我认为Chrome(或.map文件)错误解释了TypeScript的this
技巧。 (这不是JavaScript this
,我们会在纯JavaScript中将其称为_this
或that
或self
。因此Chrome使用此this
作为真实JavaScript调用上下文而不是实例的this
,这个上下文显然没有像我的TypeScript对象那样的成员。
要整理它,我不知道这是Chrome中的问题,还是VS生成的.map文件中的问题,但在很多情况下肯定会禁用调试。 (注意,当.map和.ts文件可用时,我无法调试原始的.js。)
当然有一种解决方法可以禁用服务(和生成).ts和.map文件,并调试生成的.js,但这对于在服务器端和客户端都有映射基础结构,然后完全有点令人沮丧忽略它并调试机器生成的.js代码。