2012-11-30 136 views
3

使用getUserMedia我想打電話getUserMedia從打字稿,是這樣的:如何從打字稿

return navigator.getUserMedia() 

然而,打字稿的Navigator的定義(在lib.d.ts)不包含getUserMedia。 我該如何解決?我應該修改lib.d.ts嗎?我在哪裏做這個改變?

回答

8

這個目前的做法是添加到接口,而不是編輯lib.d. ts文件。

您可以添加到TypeScript文件的界面中,並且在更新lib.d.ts時,編譯器會告訴您不再需要它。爲了使聲明的不同部分更容易閱讀,我添加了一個額外的空白區域,並在界面下添加了一個示例調用。

interface Navigator { 
    getUserMedia(
     options: { video?: bool; audio?: bool; }, 
     success: (stream: any) => void, 
     error?: (error: string) => void 
     ) : void; 
} 

navigator.getUserMedia(
    {video: true, audio: true}, 
    function (stream) { }, 
    function (error) { } 
); 

我會在使用getUserMedia的類中進行此更改。我會盡力限制該類別的所有用法getUserMedia

5

除了更改您可以強制轉換爲任何物體與任意波形參數的呼叫定義的,例如:

var n = <any>navigator; 
    n.getUserMedia = n.getUserMedia || n.webkitGetUserMedia || n.mozGetUserMedia || n.msGetUserMedia; 
    return n.getUserMedia({video: true, audio:true}, onSuccess, onFail); 
5

由於這已經是很老,但人們仍有可能來這裏尋找一個答案,這裏是用分型管理所有絕對鍵入文件更新的答案:

安裝分型,Github Page,這些命令攻入了命令行(NPM需要安裝)和下載mediastream.d.ts從那裏:

npm install typings --global 
typings init 
typings install mediastream --ambient --save 

那麼無論是從產生分型文件夾中的main.d.ts添加到您的tsconfig.json文件,或直接將它添加打印到您希望用於此行的打印稿文件:

/// <reference path="typings/main.d.ts" /> 

現在打字稿將識別navigator.getUserMedia()並正確編譯它。關於它的一個很酷的部分是,只要你有另一個JavaScript庫(或多或少是衆所周知的),你需要打字稿來識別你可以使用類型,你會在幾秒鐘內添加它。

+0

我不得不使用類型安裝dt〜webrtc/mediastream -SG – tredder

-1

導入類型定義已被simplified with TypeScript 2.0

與NPM一個開發依賴安裝的WebRTC定義

$ npm install —save @types/webrtc 

一旦安裝,使用參考指令在的.ts文件的頂部,與getUserMedia工作:

/// <reference types="webrtc" /> 

const getUserMedia = navigator.mediaDevices.getUserMedia || 
        navigator.getUserMedia || 
        navigator.webkitGetUserMedia || 
        navigator.mozGetUserMedia 

應做吧!

+0

沒有msGetUserMedia。此外navigator.mediaDevices.getUserMedia是承諾的基礎,而遺留和不贊成的navigator.getUserMedia是回調based.You基本上不需要這些墊片了,只需使用navigator.mediaDevices.getUserMedia –

+0

@PhilippHancke你對msGetUserMedia是正確的;從示例中刪除。來自我躺在身邊的一些垃圾代碼剩下的。我同意墊片不再是真正必要的,大多數都是以此爲例。 –