参数类型“元素”是不能分配给类型“ReactElement
问题描述:
这段代码的参数:参数类型“元素”是不能分配给类型“ReactElement <any>
error TS2345: Argument of type 'Element' is not assignable to parameter of type 'ReactElement<any>'.
Type 'null' is not assignable to type 'ReactElement<any>
这只:
import * as React from 'react';
const Component =() => <div/>;
function culprit<P>(node: React.ReactElement<P>) {
console.log(node);
}
culprit(<Component/>);
...与打字稿编译时会产生这个编译错误发生在strictNullChecks TypeScript编译标志设置为true
。
是的,我可以禁用该标志,但我希望它增加编译时检查/安全。
如果我改变最后一行是:
culprit((<Component/> as React.ReactElement<any>));
...它的工作原理与设置为true
标志。
我最近尝试从React项目中将“纯”JavaScript转换为TypeScript,并且这会跳过我所有的测试,因此将所有TypeScript类型断言添加到测试代码中的所有这些事件中将会很痛苦。
这是一个错误,还是我没有别的选择?
答
这显然是在15.0.5 React类型定义中引入的一个问题。如果你改为15.0.4,一切都应该没问题。
看到这个问题:https://github.com/DefinitelyTyped/DefinitelyTyped/pull/14284
我已经试过'@类型/ react'版本15.0.6,15.0.4,15.0.0和他们都仍然产生了我的问题,很遗憾。 – pleasedesktop
版本0.14.57的作品,但那是在与'| | null“被引入(这是你似乎一直试图让我)。然而,React应该允许渲染函数返回null,所以我不认为React类型定义是错误的,我认为所有不允许'null'的类型定义都需要更新。我从Enzyme.js中获得了这个“罪魁祸首”函数签名,因此它的类型定义将需要更新。 – pleasedesktop
15.0.4解决了我的问题,但我想你必须做一些不同的事情(或者在你的设置中有不同的东西)。 –