npm TypeScript 3.8中未指定getDisplayMedia

qncylg1j  于 2022-11-24  发布在  TypeScript
关注(0)|答案(2)|浏览(172)

我正在Visual Studio中编写一个.Net Core/Angular 8应用程序。
在应用程序的Angular(ClientApp)部分中,我的node_modules包含TypeScript 3.5.3,它在lib.dom.d.ts中定义了以下内容:

interface NavigatorUserMedia {
    readonly mediaDevices: MediaDevices;
    getDisplayMedia(constraints: MediaStreamConstraints): Promise<MediaStream>;
    getUserMedia(constraints: MediaStreamConstraints, successCallback: NavigatorUserMediaSuccessCallback, errorCallback: NavigatorUserMediaErrorCallback): void;
}

因此,我应该能够调用navigator.getDisplayMedia(...),但是当我尝试这样做时,我在它下面得到一个红线,说getDisplayMedia不是导航器的函数。
因此,我点击了navigator的“Go To Definition”,它将我带到了C:\Program Files (x86)\Microsoft SDKs\TypeScript中定义的TypeScript,显然是TypeScript 3.8.3。这似乎也是在Project Properties〉TypeScript Build下定义的“TypeScript Version”。查看lib.dom.d.ts文件,似乎完全没有getDisplayMedia函数。
我尝试使用NuGet下载TypeScript 3.5.3,它在Project Properties〉TypeScript Build下正确地更改了TypeScript版本,并删除了允许我正确构建项目的红线。然而,当我尝试调用该函数时,一个错误输出到浏览器控制台,说getDisplayMedia不是navigator的函数...
这到底是怎么回事?
注意:我知道应该从MediaDevices调用getDisplayMedia。但是在TypeScript 3.5.3和3.8.3的lib.dom.d.ts中,MediaDevices不包含getDisplayMedia。

jyztefdp

jyztefdp1#

没关系,这看起来是TypeScript的一个活动问题:
https://github.com/microsoft/TypeScript/issues/33232
目前的解决方法是手动定义mediaDevices:

const mediaDevices = navigator.mediaDevices as any;
const stream = await mediaDevices.getDisplayMedia();
yzuktlbb

yzuktlbb2#

这些类型是在TypeScript 4.4中添加的:
https://github.com/microsoft/TypeScript/issues/33232#issuecomment-914594775https://github.com/microsoft/TypeScript-DOM-lib-generator/issues/1029#issuecomment-869224737

相关问题