打字稿在未定义检查后无法分配属性

时间:2017-07-10 07:36:41

标签: typescript

我正在阅读有关MediaDevices.getUserMedia()的MDN文章,他们有一些针对有点特殊的浏览器的polyfill示例。你可以找到它here

我使用的是Typescript,我得到了一些奇怪的错误。我是新手稿的新手,所以我可能会遗漏一些东西。这部分:

if (navigator.mediaDevices === undefined) {
  navigator.mediaDevices = {};
}

TS告诉我,mediaDevices属性的重新分配是一个错误,因为它是一个只读属性或常量。但如果它未定义,它怎么可以只读?我很困惑。

我使用的是Typescript 2.3.4和awesome-typescript-loader用于Webpack。

1 个答案:

答案 0 :(得分:1)

问题是navigator.mediaDevices在实现它的浏览器中实际上是只读的。所以TypeScript是正确的,表明你可以分配给它。

但是,由于您将填充程序用于navigator.mediaDevices undefined可能navigator并且TypeScript似乎不理解的旧浏览器,您只需创建let navigatorCopy = navigator as any; if (navigatorCopy.mediaDevices === undefined) { navigatorCopy.mediaDevices = {}; } 的无类型副本即可添加polyfill:

checkServerTrusted