reactjs - Nye kompilasjonsfeil med react-addons-test-utils


Oppdatering til de nyeste .d.ts-definisjonene for react-addons-test-utils har brutt kompileringen av testkoden vår. I denne funksjonen:

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

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

Å sende root til den siste funksjonen her forårsaker error TS2345: Argument of type 'Component<any, {}> | Element | void' is not assignable to parameter of type 'Component<any, any>'.

Greit, jeg kan kaste:

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

Men nå forårsaker det å sende MyReactComponent på siste linje error TS2345: Argument of type 'typeof MyReactComponent' is not assignable to parameter of type 'ComponentClass<{}> & (new() => MyReactComponent) & (new() => { props: any; })'.

Tydeligvis forventer den en ClassType<any, T, C> hvor C extends ComponentClass<{}>, og på en eller annen måte passer ikke min class MyReactComponent extends React.Component<IMyReactComponentProps, IMyReactComponentState>, men hvordan, det forstår jeg ikke.

Svar #1

kan ikke tildeles til parameter av typen 'Component'

Dette betyr at root bør være av typen React.Component<any,any>. Dette betyr at signaturen til TestUtils.renderIntoDocument sannsynligvis er feil.

Hack :

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);
}

Mer

Merk at bruken av any er nødvendig siden det ikke finnes noen enkel strukturell sammenheng mellom returverdien og ønsket returverdi. Se https://basarat.gitbooks.io/typescript/content/docs/types/type-assertion.html for detaljer.

Svar #2

hadde samme problem, følgende hjalp:

TestUtils.findRenderedComponentWithType(root as React.Component<any, any>, MyReactComponent as any);

Relaterte artikler