2017-07-10 51 views
1

我正在閱讀MDN文章MediaDevices.getUserMedia(),他們對瀏覽器有一些有點特殊的示例。你可以找到它hereTypescript在未定義檢查後無法分配屬性

我正在使用Typescript,並且出現了一些奇怪的錯誤。我是新手稿,所以我可能錯過了一些東西。這一部分:

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

TS告訴我,mediaDevices財產的重新分配是一個錯誤,因爲它是一個只讀屬性或不變。但是,如果它是未定義的,它怎麼可能是隻讀的?我很困惑。

我爲Webpack使用Typescript 2.3.4和awesome-typescript-loader

回答

1

問題是navigator.mediaDevices在實現它的瀏覽器中確實是只讀的。所以TypeScript是正確的,表明你可以分配給它。

但是,由於您使用的舊的瀏覽器的填充工具,其中navigator.mediaDevices可以undefined和打字稿似乎不明白,你可以創建navigator的非類型化的副本,添加填充工具:

let navigatorCopy = navigator as any; 
if (navigatorCopy.mediaDevices === undefined) { 
    navigatorCopy.mediaDevices = {}; 
} 
+0

謝謝爲你的答案,但我仍然遇到同樣的錯誤分配空對象的副本。 – Chris

+0

似乎在[TypeScript遊樂場]工作正常(http://www.typescriptlang.org/play/#src=let%20navigatorCopy%20%3D%20navigator%20as%20any%3B%0D%0AIF%20( navigatorCopy.mediaDevices%20%3D%3D%3D%20undefined)%20%7B%0D 0A%%20%20navigatorCopy.mediaDevices%20%3D%20%7B%7D%3B%0D 0A%%7D)。如果問題仍然存在,你可以發佈你的'tsconfig.json'嗎? – Saravana

相關問題