我收到以下错误,但程序运行正常
var video = document.querySelector('#camera-stream'),
if(!navigator.getMedia){
displayErrorMessage("Your browser doesn't have support for the navigator.getUserMedia interface.");
}
else{
// Request the camera.
navigator.getMedia(
{
video: true
},
// Success Callback
function(stream:any){
// Create an object URL for the video stream and
// set it as src of our HTLM video element.
video.src = window.URL.createObjectURL(stream);
// Play the video element to start the stream.
video.play();
video.onplay = function() {
showVideo();
};
},
// Error Callback
function(err:any){
displayErrorMessage("There was an error with accessing the camera stream: " + err.name, err);
}
);
}
我尝试了解决方案in this questions,但对我不起作用。
此错误的正确解决方法是什么?
答案 0 :(得分:15)
TypeScript具有处理此方案的特殊语法。
当知道时,该值实际上既不是null
也不是undefined
,但编译器没有,您可以使用非空断言运算符!
来沟通这个。这适用于基于表达式的表达式。
declare let video: HTMLVideoElement | null | undefined;
video.src = window.URL.createObjectURL(stream); // error
video!.src = window.URL.createObjectURL(stream); // OK
video.autoplay = true; // error as the `!` does not percolate forward
video!.autoplay = true; // OK
但是,我们更有可能无法明确知道有问题的对象既不是null
也不是undefined
,毕竟,这种可能性是故意编写的类型。在这种情况下,使用!
语法将抑制编译时错误,但可能导致运行时失败。在这种情况下,我们应该通过在解除引用之前确保对象是真实的来处理这种可能性。编写此代码的常用习惯是
if (video) {
video.member
}
实际上,TypeScript使用称为控制流分析的上下文类型检查技术,从而确定video
语句块中可以安全地取消引用if
。因此,上面的代码不会导致任何错误,因为TypeScript知道它是安全的。
最好谨慎使用!
语法。
答案 1 :(得分:7)
尝试施放:
var video = document.querySelector('#camera-stream')
为:
var video = <HTMLVideoElement>document.querySelector('#camera-stream')
答案 2 :(得分:1)
通常,如果要在TypeScript中禁用严格的空检查功能,可以使用显示错误的字符!
,如下所示:
this.myRef.current!.value = ''
注意:如果您确定该对象,请执行此操作
答案 3 :(得分:1)
西蒙的答案也可以用as
来写(一些airbnb之类的短毛猫更喜欢):
var video = document.querySelector('#camera-stream') as HTMLVideoElement;