调试器忽略了 TypeScript toString

标签 typescript visual-studio-code google-chrome-devtools

作为对此的后续问题:TypeScript override ToString()

假设我们有一个 Person 类,我们要像这样覆盖 toString:

class Person {
    constructor(
        public firstName: string,
        public lastName: string
    ) {}

    public toString(): string {
       return this.firstName + ' ' + this.lastName;
    }
} 

因此,如原始问题中所述,这在执行 console.log(""+ myPerson); 时工作正常,但是在检查 Person 的实例时调试器 toString 似乎被忽略并显示默认显示。我针对 Google Chrome 的调试器(将鼠标悬停在一个变量上)和 VS Code 的调试器(都将鼠标悬停在一个变量上,并查看“本地”选项卡)进行了测试。

有什么方法可以让一个或两个调试器遵守 toString 覆盖?

注意:如果我使用toString的lambda版本没关系,结果是一样的。

最佳答案

所以你的问题和下面的差不多

How to change string representation of objects in Nodejs debug console view

toString 行为不作为普通 v8 引擎调试器 API 的一部分存在。

我深入研究了之前发布的链接,发现了一些有趣的指示

  • 从源代码编译 NodeJS 并观察调试器流量,我意识到有一个 customFormatter 概念

    setCustomObjectFormatterEnabled: function(enabled)

  • 我能够更改此 JavaScript 中的一些内容,并通过 v8 API 调用将计算后的 toString 值发回

  • 需要修改默认 VS 代码以更改行为并显示不同的文本。

  • 我从来没有一个清晰的方法来真正了解可以做什么以及如何制定适当的解决方案,所以就把它留在那里吧。

所以简而言之,这是可能的,但需要付出体面的努力才能让它发挥作用

关于调试器忽略了 TypeScript toString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49658910/

相关文章:

typescript - 如何在 TypeScript 中创建 ErrorEvent?

html - 单击可编辑

git - VS Code/Bitbucket/SSH - 权限被拒绝(公钥)

visual-studio-code - 如何在 vscode 中重命名工作区?

android - Chrome 32 上的 native USB 调试未检测到设备

javascript - 如何撤消 chrome devtools 上的 pretty-print

不允许以 2 * 开头的正则表达式

angular - 自定义 RxJS 运算符无法正常工作

visual-studio-code - 如何将 Git Bash 添加到 VsCode

javascript - 在 Chrome 开发者工具中检查 js 变量