11

我正在尝试在我的打字稿文件中为 Angular 5 应用程序使用 AudioContext。它在 Chrome 上运行良好,在 Safari 上不起作用。我通过谷歌搜索看到的所有内容都说要使用window.webkitAudioContext,但是当打字稿编译器运行时说它在 Window 类型上不存在时会立即爆炸。

let context = new AudioContext();
let source = context.createBufferSource();
context
    .decodeAudioData(event.body)
    .then(x => {
        source.buffer = x;
        source.connect(context.destination);
        source.start(0);
    });
4

4 回答 4

6

您应该扩展Window接口,然后扩充窗口对象。

假设您使用的是angular-cli,请将以下内容添加到您的typings.d.ts文件中:

declare interface Window {
  AudioContext: AudioContext;
}

然后在您的polyfills.ts文件中,您可以设置AudioContext属性:

window.AudioContext = window.AudioContext || window.webkitAudioContext;
于 2018-02-23T22:27:16.013 回答
3

你可以window投到any

(window as any).AudioContext = (window as any).AudioContext || (window as any).webkitAudioContext;
let context = new AudioContext();
于 2018-02-23T21:59:28.563 回答
2

您必须将所需的属性添加到Window全局命名空间中的接口。

declare global {
  interface Window {
    AudioContext: typeof AudioContext;
    webkitAudioContext: typeof AudioContext;
  }
}

const context = new (window.AudioContext || window.webkitAudioContext)();
于 2018-10-28T00:57:06.997 回答
1

我选择了这个单线:

const audioContext: AudioContext = new (window["AudioContext"] || window["webkitAudioContext"])();
于 2018-07-12T01:10:02.803 回答