在 TypeScript + React 项目中,我使用react-dnd和它的definiteTyped类型:
interface ExampleScreenProps { a, b, c }
interface ExampleScreenState { x, y, z }
class ExampleScreen extends React.Component<ExampleScreenProps, ExampleScreenState> { }
export default DragDropContext(HTML5Backend)(ExampleScreen);
这会在另一个组件中呈现:
import ExampleScreen from "./ExampleScreen";
<ExampleScreen a="a" b="b" c="c" />
这在 TS 1.8 中有效,没有任何错误。当我升级到 TS 2.0 时,出现以下编译错误:
错误:(90, 10) TS2600: JSX 元素属性类型 '(ExampleScreenProps & { children?: ReactNode; }) | (ExampleScreenProps & { children...' 可能不是联合类型。
这是 的类型定义DragDropContext
:
export function DragDropContext<P>(
backend: Backend
): <P>(componentClass: React.ComponentClass<P> | React.StatelessComponent<P>) => ContextComponentClass<P>;
我不能把这个放在一起。抱怨的错误是什么?它似乎不喜欢并集ComponentClass<P> | StatelessComponent<P>
,但那些不是元素属性,元素属性只是<P>
。我尝试明确传递<P>
:
export default DragDropContext<ExampleProps>(HTML5Backend)(ExampleScreen);
但同样的错误仍然存在。我可以通过断言输出来解决它:
export default DragDropContext(HTML5Backend)(ExampleScreen) as React.ComponentClass<ExampleProps>;
但我不喜欢使用断言,我不了解实际问题,或者我做错了什么。这是可以修复的打字问题吗?