Flowtype 为什么流仍然抱怨document.getElementById的空值
为什么即使使用IF检查,流仍然会抱怨可能的空值Flowtype 为什么流仍然抱怨document.getElementById的空值,flowtype,Flowtype,为什么即使使用IF检查,流仍然会抱怨可能的空值 if(document && document.getElementById("myID") && document.getElementById("myID").offsetWidth){ console.log(document.getElementById("myID").offsetWidth); } 给出了这个错误 ^ property `offsetWidth`. Property cannot
if(document && document.getElementById("myID") && document.getElementById("myID").offsetWidth){
console.log(document.getElementById("myID").offsetWidth);
}
给出了这个错误
^ property `offsetWidth`. Property cannot be accessed on possibly null value
Flow无法知道对
getElementById
的第一次调用成功意味着后面的调用也会成功。据它所知,读取offsetWidth
属性可能会导致getElementById
在下次调用时开始返回null
您需要存储该值,例如
const myIdEl = document && document.getElementById("myID");
if(myIdEl && myIdEl.offsetWidth) {
console.log(myIdEl.offsetWidth);
}
通过这种方式,
myIdEl
在被引用后无法变为null。流无法知道对getElementById
的第一次调用成功意味着后面的调用也将成功。据它所知,读取offsetWidth
属性可能会导致getElementById
在下次调用时开始返回null
您需要存储该值,例如
const myIdEl = document && document.getElementById("myID");
if(myIdEl && myIdEl.offsetWidth) {
console.log(myIdEl.offsetWidth);
}
通过这种方式,myIdEl
在被引用后不能变为null。对于FlowType中的HtmleElement(以及HtmleElement的扩展,如VideoHtmleElement),我建议使用instanceof
来验证类型并验证它是否为null
另外,我认为您不需要检查是否存在在flow(1)中全局定义的文档*
示例
constmyidel:?HTMLElement=document.getElementById('myID');
if(HtmleElement的myIdEl实例){
//继续
console.log(myIdEl.offsetWidth);
}
示例
const selectEl:?HTMLElement=document.getElementById('someSelectElement');
//检查正确的类型(!null!未定义免费提供)
如果(选择HtmlSelect元素的EL实例){
const selectedVal=selectEl.options[selectEl.selectedIndex].value;
}
使用不变量的示例
从“不变量”导入不变量;
const videoContent=document.getElementById('video-player');
不变量(HTMLVideoElement的videoContent实例,“无视频元素”);
//使用视频api做一些事情
videoContent.volume=0;
plause();
对于FlowType中的HtmleElement(以及HtmleElement的扩展,如VideoHtmleElement),我建议使用instanceof
来验证类型并验证它是否为null
另外,我认为您不需要检查是否存在在flow(1)中全局定义的文档*
示例
constmyidel:?HTMLElement=document.getElementById('myID');
if(HtmleElement的myIdEl实例){
//继续
console.log(myIdEl.offsetWidth);
}
示例
const selectEl:?HTMLElement=document.getElementById('someSelectElement');
//检查正确的类型(!null!未定义免费提供)
如果(选择HtmlSelect元素的EL实例){
const selectedVal=selectEl.options[selectEl.selectedIndex].value;
}
使用不变量的示例
从“不变量”导入不变量;
const videoContent=document.getElementById('video-player');
不变量(HTMLVideoElement的videoContent实例,“无视频元素”);
//使用视频api做一些事情
videoContent.volume=0;
plause();