参数类型“元素”是不能分配给类型“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

+0

我已经试过'@类型/ react'版本15.0.6,15.0.4,15.0.0和他们都仍然产生了我的问题,很遗憾。 – pleasedesktop

+0

版本0.14.57的作品,但那是在与'| | null“被引入(这是你似乎一直试图让我)。然而,React应该允许渲染函数返回null,所以我不认为React类型定义是错误的,我认为所有不允许'null'的类型定义都需要更新。我从Enzyme.js中获得了这个“罪魁祸首”函数签名,因此它的类型定义将需要更新。 – pleasedesktop

+0

15.0.4解决了我的问题,但我想你必须做一些不同的事情(或者在你的设置中有不同的东西)。 –