For AI agents: the complete documentation index is available at /tc39-atlas/llms.txt, the full documentation bundle is available at /tc39-atlas/llms-full.txt, and this page is available as Markdown at /tc39-atlas/proposals/stage/1/proposal-inspector.md.
  • 简体中文
  • Inspector S1

    中文标题:检查器

    提案概览
    提案速览

    该提案旨在提供一种原生的、人类友好的方式来检查和比较值,解决当前错误消息中手动字符串插值的局限性。它提出了一种标准机制,能够提供对代理和内部插槽等内部细节的特殊访问,可能使测试运行器和模式匹配受益。

    Note

    以下 README 来自上游仓库,其中的阶段或状态标注可能滞后;当前信息以提案概览为准。

    提案:检查器

    提案发起人:

    • @JakobJingleheimer
    • @gibson042

    作者:

    • @JakobJingleheimer

    阶段

    当前:1(2025年5月30日)

    问题

    以人类友好的方式提供详细的检查信息,例如在比较(差异)值时。

    比较的上下文中,仅知道 A 不符合预期几乎毫无用处,因为你看不到 AB 是什么。

    示例(当前原生能力)

    令人烦恼的:

    if (A !== B) throw new Error('A does not equal B');
    // 错误:A 不等于 B

    更好的:

    if (A !== B) throw new Error(`${A} does not equal ${B}`);
    // 错误:1 不等于 2

    但是脆弱的:

    if (A !== B) throw new Error(`${A} does not equal ${B}`);
    // 错误:[object Object] 不等于 [object Object]
    示例(普遍期望)
    const result = compare(A, B);
    
    {
      pretty: `{
    
      ✓     qux: 'a',
      ✗     qux: 'b',
    
      }`,
      paths: ['foo.bar.qux'],
      expected: 'a',
      actual: 'b',
    }

    原生提供的理由:

    • 对用户空间来说,组合这些信息非常昂贵(占据了测试运行器执行时间的绝大部分)
      • 美化打印
    • 特殊访问(需要模式 - 在“生产环境”中不可用):
      • 代理
      • 表达式的组成部分(编译器)
      • 结构的组成部分(差异)
      • 内部插槽
    • 广泛适用:不仅可以用于比较,还可以用于其他场景(例如模式匹配可以利用这一点;它完全可以独立使用)。

    当前生态系统

    目前,用户空间中有几个库以不同方式提供此功能。

    运行时(可以提供特殊访问):

    库(无法提供特殊访问):

    在阶段 2 之前

    • 考虑自定义/可扩展性(公开符号?)
      • 这对于可能希望在底层使用 Inspector 并只调整一小部分的框架尤其重要。
    • 确定提供哪些信息、如何提供以及在什么情况下提供。
    • 模式作为提供“特殊访问”的要求。