首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Typescript,如何传递“对象可能为空”错误?

Typescript,如何传递“对象可能为空”错误?
EN

Stack Overflow用户
提问于 2019-04-15 00:36:07
回答 7查看 61.9K关注 0票数 76

我已经多次收到"Object is possibly“错误,通常我会使用安全的"if语句”,以防它返回null。

我有以下函数:

代码语言:javascript
运行
复制
const ModalOverlay = (props: any[]) => {
  const overlayEl = useRef(null);
    useEffect(() => {
    overlayEl.current.focus();
    });
    return ;
  }


But overlayEl.current gets the error "Object is not defined". So I've tried:

if (!overlayEl) {
    return null
  } else {
    useEffect(() => {
    overlayEl.current.focus();
    });
    return ;
  }


Which didn't work. I've tried also: 

overlay && overlayEl.current.focus();


Any hints would be highly appreciated! Thanks
EN

Stack Overflow用户

回答已采纳

发布于 2019-04-15 04:55:22

当你声明const typescript = useRef( null );使它的类型为null,因为这是它能提供的最好的推断,它可以提供那么多的信息,给typescript更多的信息,它就会像预期的那样工作。

试试看..。

代码语言:javascript
运行
复制
const overlayEl = useRef(null);

或者,一些语法糖,如果你不关心它的未定义是这样做的。

代码语言:javascript
运行
复制
const overlayEl = useRef(document.createElement("div"))

使用上面的语法,所有常见的DOM方法都只返回默认值,如"0“,即overlayEl.offsetWidth、getBoundingClientRect等。

用法:

代码语言:javascript
运行
复制
if(overlayEl.current) {
    // will be type HTMLDivElement NOT HTMLDivElement | null
    const whattype = overlayEl.current; 
}

这种工作方式是类型脚本静态分析足够聪明,可以找出

检查"guards“是否为null,因此它将把该类型作为一个可能的类型从

在那些括号里。

票数 140
EN
查看全部 7 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55677600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档