我想延長(在OOP方面)內置AudioContext類打字稿:擴展AudioContext在打字稿
class LiveAudioContext extends AudioContext {
constructor() {
super();
}
public setPlaybackRate(rate: number) {
console.log(`Set rate to ${rate}.`);
}
}
這是有效的打字稿,由編譯器和智能感知都接受。在不過運行時,我得到一個TypeError
,對於其Chrome瀏覽器添加了以下錯誤消息,以及:
var liveCtx = new LiveAudioContext();
無法構造「AudioContext」:請使用「新」運營商,這個DOM對象的構造不能稱爲功能。
不夠公平,我知道如何才能解決compiled Javascript output中的問題。但是,每次構建後必須手動修復由編譯器引起的錯誤纔不適合生產使用。
我怎樣才能正確地完成這個擴展,以便它在編譯後的輸出中也能正常工作,並且是現成的?
編輯:當然,建立一個包裝類,有效地重新定義了每一個方法和屬性的作品,但我覺得它是聞 - 更像是臭和嚴重 - 從架構的角度觀點:
class LiveAudioContext {
private internalContext: AudioContext;
public createBuffer() {
return this.internalContext.createBuffer.apply(this.internalContext, arguments);
}
public createBufferSource() {
return this.internalContext.createBufferSource.apply(this.internalContext, arguments);
}
...
}
某些內置程序不可擴展。我相信[代理API](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy)是爲了處理這個用例,但是這會將你降級到更新的版本瀏覽器。 – ArcSine