2017-07-10 4 views
1

Ich las den MDN-Artikel für MediaDevices.getUserMedia() und sie haben ein wenig Polyfill-Beispiel für Browser, die ein bisschen speziell sind. Sie können es here finden.Typescript kann Eigenschaft nach undefinierter Prüfung nicht zuweisen

Ich verwende Typoskript und ich bekomme einige seltsame Fehler. Ich bin neu in Typescript, also vermisse ich wahrscheinlich etwas. Dieser Teil:

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

TS sagt mir, dass die Neuzuordnung des mediaDevices Eigenschaft ist ein Fehler, weil es sich um eine schreibgeschützte Eigenschaft oder konstant ist. Aber wenn es nicht definiert ist, wie kann es schreibgeschützt sein? Ich bin verwirrt.

Ich verwende Typoskript 2.3.4 und die awesome-typescript-loader für Webpack.

Antwort

1

Das Problem ist, dass navigator.mediaDevices in Browsern, die es implementieren, wirklich schreibgeschützt ist. TypeScript weist also korrekt darauf hin, dass Sie ihm zuweisen können.

jedoch, da Sie die polyfill für alte Browser verwenden, wo navigator.mediaDevicesundefined sein kann und Typoskript scheint nicht zu verstehen, dass, Sie können nur eine nicht typisierte Kopie des navigator erstellen die polyfill hinzuzufügen:

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

Dank für Ihre Antwort, aber ich bekomme immer noch den gleichen Fehler, wenn Sie der Kopie das leere Objekt zuweisen. – Chris

+0

Scheint gut zu funktionieren auf dem [TypeScript playground] (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). Können Sie Ihren 'tsconfig.json' posten, wenn das Problem weiterhin besteht? – Saravana

Verwandte Themen