Javascript 将Instana错误跟踪集成到Angular 2应用程序中

Javascript 将Instana错误跟踪集成到Angular 2应用程序中,javascript,angular,typescript,instana,Javascript,Angular,Typescript,Instana,我正在尝试将Instana集成到应用程序中。更具体地说,我正在尝试将Angular应用程序中的错误发送到Instana。我的代码“有效”,所以这是一个关于最佳实践的问题 据我所知,Instana在“窗口”中定义函数。我在index.html中设置了类似的内容 (函数(i,s,o,g,r,a,m){i['InstanaEumObject']=r;i[r]=i[r]| |函数(){ (i[r].q=i[r].q | |[]).push(参数)},i[r].l=1*新日期();a=s.createE

我正在尝试将Instana集成到应用程序中。更具体地说,我正在尝试将Angular应用程序中的错误发送到Instana。我的代码“有效”,所以这是一个关于最佳实践的问题

据我所知,Instana在“窗口”中定义函数。我在index.html中设置了类似的内容


(函数(i,s,o,g,r,a,m){i['InstanaEumObject']=r;i[r]=i[r]| |函数(){
(i[r].q=i[r].q | |[]).push(参数)},i[r].l=1*新日期();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(窗口,文档,'script','/eum.instana.io/eum.min.js','ineum');
ineum('apiKey','someKey');
ineum('traceId','backendTraceId')//用适当的表达式替换“backendTraceId”以进行检索
我遇到的问题是,当我试图遵循Instana关于错误跟踪的指南时,他们调用了我可以从窗口访问的方法之一。指南直接调用函数
ineum(…)
。当我尝试这样做时,我的项目无法编译

class CustomErrorHandler implements ErrorHandler {
  handleError(error) {
    ineum('reportError', error);

    // Continue to log caught errors to the console
    console.error(error);
  }
}
我目前的解决方案是:
(他们在javascript中以不同的方式访问窗口)

  • “任何”的打字窗口是一个坏习惯吗
  • 尝试
    window['ineum'](…)
    是否更好,或者这只是一种语法偏好
  • 是否最好尝试在另一个文件中定义函数,比如instanna服务,然后在index.html脚本和CustomErrorHandler中使用该服务,或者将其保存在窗口中?(尽管这可能是我需要弄清楚的一个小把戏)
  • 很抱歉我的困惑,因为这可能不是一个实际问题,因为我的代码正在“工作”,但我只是想澄清一下。我不确定我是否没有正确地遵循Instana的指南,但这是我能找到的最好的方法。我试着通过他们的联系页面联系他们,但我还没有收到回复。

    Instana没有回复帽子展示了如何做到这一点

    要总结您需要的部分,请执行以下操作:

  • 确保在TypeScript配置中配置了允许自定义键入定义的本地目录:
  • 在此目录中的文件中声明全局
    ineum
    函数:
  • //通用文件名globals.d.ts
    声明函数ineum(s:string,…参数:any[]):any;
    
    这两个步骤的结合将使TypeScript意识到该函数。现在,您可以像使用任何其他全局脚本一样使用
    ineum

    // common file name: tsconfig.app.json
    {
      // other configuration…
      "typeRoots": [
        // other configuration…
        "./custom-typings"
      ]
    }