是否可以通过打字稿获取范围内的所有变量?

时间:2021-03-04 07:34:56

标签: node.js typescript v8

我知道在 javascript 中有一篇关于此功能的旧帖子:Getting All Variables In Scope

但我拼命地寻找并想我只是问一下,以防打字稿中可能存在转换魔法(或我们可以扩展它的方式)可能会实现这一点..(例如)

.ts

() => {
  const a = 123;
  console.log(scope)
} 

.js 转译

var scope = {};
() => { 
  scope.a = 123;
  console.log(scope);
}

我问的原因是我正在寻找一个节点后端解决方案,以便能够记录函数的作用域状态并将其保存在调试数据库中以供审查。 (因此,任何时候发生错误时,状态都不会丢失,而是会记录下来)


@k0pernikus

具体说明我的问题,我正在尝试了解有关 firebase 事件处理程序出了什么问题的更多背景信息。 functions.firestore.document('users/{uid}').onUpdate

// ====== Pretend code I wish would work =====
const logScopeSomewhere = (anonymousScope) => (err) => {
  console.log(anonymousScope) // { pie: 'pie', apple: 'apple' }
  // or write error to database..
  // Main goal is that all variables in the function that errored are logged with the Type Error..
}
const handleUpdate = (change: Change<QueryDocumentSnapshot>, context: EventContext) => {
  let anonymousScope;
  return (async () => {
    anonymousScope = scope; // special reserved - // Possible JS transpile manipulation can have a closure on top..
    const pie = 'pie'; // anonymousScope.pie
    const apple = 'apple'; // anonymousScope.apple
    // apple.core.seed - // TypeError (will go to catch..)
  })().catch(logScopeSomewhere(anonymousScope))
}
functions.firestore.document('users/{uid}').onUpdate(handleUpdate)

为了更清楚,我想要一个对象,该对象具有发生错误时执行函数状态的快照。我打算抓住它并将其用作日志信息。

1 个答案:

答案 0 :(得分:1)

我认为 V8 不会通过 DevTools 以外的任何其他方式公开范围信息。

您可以解析自己的源代码,这样您就可以进行任何分析。有关示例,请参阅 this answer 到您链接的旧问题。

TypeScript 编译器必须已经在内部进行了相同的分析,所以我很确定它可以扩展为转储该信息。例如,应该可以使用 scope 关键字(或其他)扩展 TypeScript 语言,该关键字被编译为包含所有范围内变量及其值的 JS 对象。也就是说,我不知道是否已经存在类似的东西,或者如何添加它。

相关问题