如何抽象出浏览器的 window 对象的用法?

How to abstract away the usage of browser's window object?

如何在使用 Aurelia 框架时抽象出浏览器 window 对象的用法?例如,在使用 setIntervaladdEventListener 等功能时,我想避免直接依赖浏览器。

A​​urelia 有一个叫做 平台抽象库 的东西,理论上它应该提供我正在寻找的功能。但是,在写这个问题时,我找不到任何关于它的文档。

几个例子:

import {DOM, PLATFORM, FEATURE} from 'aurelia-pal';

PLATFORM.addEventListener('click', e => ...);
PLATFORM.requestAnimationFrame(() => ...);

let event = DOM.createCustomEvent('foo', { bubbles: true });
DOM.dispatchEvent(event);
let element = DOM.createElement('div');

if (FEATURE.shadowDOM && FEATURE.scopedCSS && FEATURE.htmlTemplateElement) {
  ...
}

PAL 中没有 setTimeout / setInterval- 我认为是因为 aurelia 不使用 setTimeout 我添加了一个 issue 来添加这些。