带有react-dnd的TypeScript 2.0会出现错误" JSX元素属性可能不是联合类型"

时间:2016-10-26 18:14:22

标签: reactjs typescript typescript-typings react-dnd

在TypeScript + React项目中,我使用react-dnd及其DefinitelyTyped typings

import ExampleScreen from "./ExampleScreen";

<ExampleScreen a="a" b="b" c="c" />

这会在另一个组件中呈现:

export function DragDropContext<P>(
    backend: Backend
): <P>(componentClass: React.ComponentClass<P> | React.StatelessComponent<P>) => ContextComponentClass<P>;

这适用于TS 1.8,没有任何错误。当我升级到TS 2.0时,我得到以下编译错误:

  

错误:(90,10)TS2600:JSX元素属性类型   &#39;(ExampleScreenProps&amp; {children?:ReactNode;})|   (ExampleScreenProps&amp; {children ...&#39;可能不是联合类型。

这是type definition for DragDropContext

ComponentClass<P> | StatelessComponent<P>

我不能把它放在一起。抱怨的错误是什么?似乎它不喜欢<P>的并集,但那些不是元素属性,元素属性只是<P>。我试过明确传递export default DragDropContext<ExampleProps>(HTML5Backend)(ExampleScreen);

export default DragDropContext(HTML5Backend)(ExampleScreen) as React.ComponentClass<ExampleProps>;

但同样的错误仍然存​​在。我可以通过声明输出来解决它:

get()

但我不想使用断言而我不了解实际问题,或者我做错了什么。这是一个可以解决的打字问题吗?

2 个答案:

答案 0 :(得分:1)

打字稿2.4.2没有构建错误 并使用了依赖项:

    "react": "^15.6.1",
    "react-dom": "^15.6.1",
    "react-dnd":"^2.4.0"

    "@types/react": "^16.0.5",
    "@types/react-dom": "^15.0.0",
    "@types/react-dnd":"^2.0.33",

答案 1 :(得分:0)

您可以使用以下方式安装新的打字:

npm i @types/react-dnd --save-dev

如果您已安装其他类型,请使用以下命令将其删除:

typings uninstall --save --global react-dnd

之后它应该按预期工作。