次のような TypeScript からgetUserMediaを呼び出したいと思います 。
return navigator.getUserMedia()
ただし、TypeScript の Navigator の定義 (lib.d.ts 内) には getUserMedia が含まれていません。どうすれば回避できますか? lib.d.ts を変更する必要がありますか? この変更はどこで行うのですか?
次のような TypeScript からgetUserMediaを呼び出したいと思います 。
return navigator.getUserMedia()
ただし、TypeScript の Navigator の定義 (lib.d.ts 内) には getUserMedia が含まれていません。どうすれば回避できますか? lib.d.ts を変更する必要がありますか? この変更はどこで行うのですか?
定義を変更する代わりに、任意のオブジェクトに任意のパラメータを使用して呼び出しをキャストできます。例:
var n = <any>navigator;
n.getUserMedia = n.getUserMedia || n.webkitGetUserMedia || n.mozGetUserMedia || n.msGetUserMedia;
return n.getUserMedia({video: true, audio:true}, onSuccess, onFail);
これに対する現在の慣行は、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
をそのクラスに制限しようとします。
これはすでにかなり古いものですが、人々はまだ答えを求めてここに来るかもしれません.
これらのコマンドをコマンド ラインにハッキングして、typings のGithub Pageをインストールし (npm をインストールする必要があります)、そこから mediastream.d.ts をダウンロードします。
npm install typings --global
typings init
typings install mediastream --ambient --save
次に、生成されたtypingsフォルダーからmain.d.tsをtsconfig.jsonファイルに追加するか、次の行で使用するtypescriptファイルに直接追加します。
/// <reference path="typings/main.d.ts" />
typescript が navigator.getUserMedia() を認識し、正しくコンパイルするようになりました。そして、それについてのクールな部分は、別のjavascriptライブラリ(多かれ少なかれよく知られている)があるときはいつでも、タイピングを使用できることを認識するためにtypescriptが必要であり、数秒で追加されることです。