更新为 react-addons-test-utils 的最新 .d.ts 定义破坏了我们测试代码的编译。在这个函数中:

import * as TestUtils from 'react-addons-test-utils';
import MyReactComponent from 'blabla'

let buildComponent = () => {
    const root = TestUtils.renderIntoDocument(<MyReactComponent/>);
    return TestUtils.findRenderedComponentWithType(root, MyReactComponent);
}

root 传递给这里的最后一个函数会导致 error TS2345: Argument of type 'Component<any, {}> | Element | void' is not assignable to parameter of type 'Component<any, any>'.
好吧,我可以转换:
let buildComponent = () => {
    const root = TestUtils.renderIntoDocument(<MyReactComponent/>);
    return TestUtils.findRenderedComponentWithType(root as React.Component<any, any>, MyReactComponent);
}

但是现在在最后一行传递 MyReactComponent 会导致 error TS2345: Argument of type 'typeof MyReactComponent' is not assignable to parameter of type 'ComponentClass<{}> & (new () => MyReactComponent) & (new () => { props: any; })'.
显然它需要一个 ClassType<any, T, C> ,其中 C extends ComponentClass<{}> ,不知何故我的 class MyReactComponent extends React.Component<IMyReactComponentProps, IMyReactComponentState> 不符合要求,但是如何,我不明白。

最佳答案



这意味着 root 应该是 React.Component<any,any> 类型。这意味着 TestUtils.renderIntoDocument 的签名可能是错误的。

黑客:

import * as TestUtils from 'react-addons-test-utils';
import MyReactComponent from 'blabla'

let buildComponent = () => {
    const root: React.Component<any, any> = TestUtils.renderIntoDocument(<MyReactComponent/>) as any;
    return TestUtils.findRenderedComponentWithType(root, MyReactComponent);
}

更多的

请注意,需要使用 any,因为返回值和所需返回值之间没有简单的结构关系。有关详细信息,请参阅 https://basarat.gitbooks.io/typescript/content/docs/types/type-assertion.html

关于reactjs - react-addons-test-utils 的新编译错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36434002/

10-16 19:35