在 Angular 5 中检测 IE11 并抑制 "property doesn't exist" 警告

Detect IE11 in Angular 5 and suppress "property doesn't exist" warnings

我正在处理需要滚动位置的自定义指令。我发现所有主流浏览器都支持 window.scrollY 而 IE11 需要 document.documentElement.scrollTop

所以我在这里尝试确定当前浏览器是否为 IE11:

  ngOnInit(){
    this.isIE11 = !!window.MSInputMethodContext && !!document.documentMode;// tslint:disable-line
    this.checkScrollPosition();
  }

我遇到 ts 错误 property MSInputMethodContext doesnt exist on type Windowproperty documentMode doesnt exist on type Document,尽管代码在我测试过的所有浏览器(chorme、safari、ie11)中都运行良好

1) 我认为这会工作得很好吗,因为 TS 将被转换为可以访问这些属性的纯 JS?

2) 我应该抑制这个警告(如何?)还是应该尝试不同的浏览器检测方法?

我尝试添加这个,但到目前为止还没有成功:

//tslint:disable-line
//noinspection TypeScriptUnresolvedProperty

看来您可以使用 pageYOffset 而不是 scrollYpageYOffsetscrollY 的别名,但有更好的支持:https://developer.mozilla.org/it/docs/Web/API/Window/pageYOffset

如果您想坚持您的解决方案:

1) 是的,你的假设是对的。

2) 您可以通过简单的虚拟转换来抑制警告:

!!(window as any).MSInputMethodContext && !!(document as any).documentMode;