2016-04-21 88 views
1

我想延長(在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); 
    } 

    ... 
} 
+0

某些內置程序不可擴展。我相信[代理API](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy)是爲了處理這個用例,但是這會將你降級到更新的版本瀏覽器。 – ArcSine

回答