如何解决“从不”类型中不存在属性

Posted

技术标签:

【中文标题】如何解决“从不”类型中不存在属性【英文标题】:How to solve Property does not exist in type 'never' 【发布时间】:2022-01-23 03:20:25 【问题描述】:

我正在使用库 react-google-recaptcha 来生成不可见的 ReCaptcha,但出现以下打字稿错误:

“从不”类型中不存在属性“执行”

这是代码:

  const recaptcha = useRef(null);

  useEffect(() => 
    let token;
    if (recaptchaLoaded) 
      token = recaptcha.current?.execute();
    
  , [recaptchaLoaded]);
  
  
   <ReCAPTCHA
      ref=recaptcha
      sitekey=SITE_KEY
    />

我怎样才能输入 .execute() 以使这个错误不再发生? 或者我应该用其他方式吗?

谢谢

【问题讨论】:

也许通过分离你的代码,一个包含recaptcha.current的临时变量,然后一个条件来测试你是否可以在上面调用execute const recaptcha = useRef(null);尝试这个 ? const recaptcha = useRef(null);还是这个? 使用 const recaptcha = useRef(null) 解决了!谢谢 【参考方案1】:

您需要通过向 useRef 提供 type 参数 来告诉 TypeScript ref 将引用的类型(因为 TypeScript 无法从初始值 null 推断它)。假设您使用的是this npm package,您似乎使用了组件的类型:

const recaptcha = useRef<ReCAPTCHA>(null);
//                      ^^^^^^^^^^^

【讨论】:

以上是关于如何解决“从不”类型中不存在属性的主要内容,如果未能解决你的问题,请参考以下文章

如何解决 .net 标准中的命名空间“System.Configuration”错误中不存在类型或命名空间名称“ConfigurationManager”?

Vetur 说,在模板上使用道具时,“从不”类型中不存在道具

如何解决 MS SQL 中不受支持的无符号整数字段类型?

“EventTarget”类型中不存在属性“值”

解决命名空间“System.Web.Mvc”中不存在类型或命名空间名称“Ajax”(是否缺少程序集引用?)

为啥 viewDidLoad() 中不存在 TableView 的 FooterView 以及如何解决?