如何从TypeScript使用getUserMedia

如何从TypeScript使用getUserMedia,typescript,Typescript,我想从TypeScript调用,类似于: return navigator.getUserMedia() 但是,TypeScript的导航器定义(在lib.d.ts中)不包含getUserMedia。 我该如何工作?我应该修改lib.d.ts吗?在何处进行此更改?您可以使用任意参数将调用强制转换为任意对象,而不是更改定义,例如: var n = <any>navigator; n.getUserMedia = n.getUserMedia || n.webki

我想从TypeScript调用,类似于:

 return  navigator.getUserMedia()
但是,TypeScript的导航器定义(在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);
var n=navigator;
n、 getUserMedia=n.getUserMedia | | n.webkitGetUserMedia | | n.mozGetUserMedia | | n.msGetUserMedia;
返回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
的所有用法限制在该类中。

因为这已经很旧了,但人们可能仍然会来这里寻找答案,这里有一个更新的答案,使用打字来管理所有明确键入的文件:

安装打字,将这些命令插入命令行(需要安装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来识别,你只需使用打字,几秒钟后你就会添加它

导入类型定义已成功

使用NPM将webrtc定义作为开发人员依赖项安装

$ npm install —save @types/webrtc
安装后,使用与getUserMedia一起使用的.ts文件顶部的引用指令:

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

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

那就够了

我必须使用typings安装dt~webrtc/mediastream-sg,因为没有msGetUserMedia。另外,navigator.mediaDevices.getUserMedia是基于承诺的,而旧版和不推荐使用的navigator.getUserMedia是基于回调的。您基本上不再需要这些垫片,只需使用navigator.mediaDevices即可。getUserMedia@PhilippHancke关于msGetUserMedia,您是正确的;从示例中删除。我到处都是一些垃圾代码的残留物。我同意垫片不再是真正必要的,主要是作为一个例子指出。