首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类型'Element‘的参数不能分配给'ReactElement<any>’类型的参数

类型'Element‘的参数不能分配给'ReactElement<any>’类型的参数
EN

Stack Overflow用户
提问于 2017-02-04 05:50:02
回答 2查看 109.3K关注 0票数 37

此代码:

代码语言:javascript
复制
import * as React from 'react';                                                                                              
                                                                                 
const Component = () => <div/>;                                                  
                
function culprit<P>(node: React.ReactElement<P>) {
  console.log(node);
}
                                                             
culprit(<Component/>);

...produces使用TypeScript编译时出现此编译错误:

错误TS2345:类型'Element‘的参数不能分配给'ReactElement’类型的参数。类型'null‘不能指定为'ReactElement’

只有当strictNullChecks TypeScript编译标志设置为true时才会发生这种情况。

是的,我可以禁用该标志,但为了增加编译时检查/安全性,我希望它能打开。

如果我将最后一行改为:

代码语言:javascript
复制
culprit( (<Component/> as React.ReactElement<any>) );

...it使用设置为true的标志。

最近,我在一个React项目中尝试从“普通”JavaScript迁移到TypeScript,这使我的所有测试都失败了,因此在测试代码中将所有TypeScript类型断言添加到所有这些事件中都会很痛苦。

这是个窃听器,还是我别无选择?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-04 12:33:57

这显然是15.0.5 React类型定义中引入的一个问题。如果你改到15.0.4,一切都会好起来的。

见本期:https://github.com/DefinitelyTyped/DefinitelyTyped/pull/14284

票数 11
EN

Stack Overflow用户

发布于 2019-05-20 09:05:20

如果组件或组件中有JSX,则测试文件必须以.tsx作为文件扩展名。我的代码没有编译,因为我有.ts文件扩展名。从我将它重命名为.tsx/jsx的那一刻起,它就开始很好地工作了!

还请注意,我使用的是类型记录,所以我将它重命名为.tsx。如果您正在使用ES6,请将它重命名为.jsx

票数 47
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42036992

复制
相关文章

相似问题

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