Angular2罐';找不到名称';YT';即使在全局对象上定义

Angular2罐';找不到名称';YT';即使在全局对象上定义,angular,typescript,youtube-api,youtube-iframe-api,Angular,Typescript,Youtube Api,Youtube Iframe Api,为了捕捉用户暂停youtube视频()的时间,我发现自己在Angular2中使用了onYouTubeIframeAPIReady回调方法 我遇到了与上述和类似的困难 我遵循了建议,最终使用了(任何窗口)。onyoutubeiframeapiredy=function(){} 但是,在我的onYouTubeIframeAPIReady方法中,我有以下代码: function onYouTubeIframeAPIReady() { player = new YT.Player('video',

为了捕捉用户暂停youtube视频()的时间,我发现自己在Angular2中使用了onYouTubeIframeAPIReady回调方法

我遇到了与上述和类似的困难

我遵循了建议,最终使用了
(任何窗口)。onyoutubeiframeapiredy=function(){}

但是,在我的onYouTubeIframeAPIReady方法中,我有以下代码:

function onYouTubeIframeAPIReady() {
  player = new YT.Player('video', {
    events: {
     'onReady': onPlayerReady,
     'onStateChange': onPlayerStateChange
    }
  });
} 
我从我的typescript linter中得到以下错误:

类型为“{events:{'onReady':(event:any)=>void;'onStateChange':(event:any)=>void;};}”的参数不能分配给类型为“PlayerOptions”的参数

我的最低回购示例可在此处找到:

git clone https://github.com/Atticus29/dataJitsu.git
cd dataJitsu
git checkout stackoverflow
npm install
ng serve

使用
window['YT']
而不是
YT
似乎可以解决这个问题:

ngOnInit() {
  var player;

  window['onYouTubeIframeAPIReady'] = function() {
    player = new window['YT'].Player('video', {
      events: {
        'onReady': onPlayerReady,
        'onStateChange': onPlayerStateChange
      }
    });
  }

  function onPlayerStateChange(event){
    if (event.data == window['YT'].PlayerState.PAUSED) {
      console.log(player.getCurrentTime());
    }
  }

  function onPlayerReady(event) {
    document.getElementById("pause").addEventListener("click", function() {
      player.pauseVideo();
    });
    document.getElementById("play").addEventListener("click", function() {
      player.playVideo();
    });
  }

  if (!window['YT']){
    var tag = document.createElement('script');
    tag.src = "//www.youtube.com/player_api";
    var firstScriptTag = document.getElementsByTagName('script')[0];
    firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
  }
}

再次感谢,@Bertrand Martel!知道为什么会这样吗?window['YT']实际上是做什么的?