在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()
但我不想使用断言而我不了解实际问题,或者我做错了什么。这是一个可以解决的打字问题吗?
答案 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
之后它应该按预期工作。