ReactTestUtils Simulate.Change参数类型SyntheticEventData错误

时间:2017-08-30 08:08:41

标签: reactjs typescript typescript-typings react-dom reactjs-testutils

我在下面的代码中写了这个代码,它使用了#34; react-dom / test-utils"中的ReactTestUtils。

let nameInput = TestUtilsExtended.findRenderedDOMComponentWithTag(root, "input");

TestUtilsExtended.Simulate.change(nameInput, {
    target: {
        value : "alice"
    }
} as any);

它工作正常,当我放置as any时,结果与预期一致。如果我删除了转换,则会发生以下错误:

  

[ts]类型的参数' {target:{value:string; }; }'不能分配给' SyntheticEventData'类型的参数。财产类型'目标'是不相容的。输入' {value:string; }'不能分配到' EventTarget'。对象文字只能指定已知属性,而且值为'类型' EventTarget'。

中不存在

以下是我从Simulate.change得到的@types/react-dom (version: ^15.5.4)的智能感知:

const Simulate.change: (element: React.ReactInstance, eventData?: SyntheticEventData) => void

SyntheticEventData界面的声明中,我发现target属性类型为Javascript EventTarget

export interface OptionalEventProperties {
    // ....
    target?: EventTarget;
}

export interface SyntheticEventData extends OptionalEventProperties {
    // ....
}

由于我在执行as any投射时代码按预期工作,因此我不太了解此EventTarget界面的工作原理。

你们知道删除as any投射的解决方法吗?因为如果可能的话,我希望尽量减少在我的代码中将任何内容转换为any。我想强制输入代码。

1 个答案:

答案 0 :(得分:0)

您需要强制转换为未知,然后将其强制转换为EventTarget

let nameInput = TestUtilsExtended.findRenderedDOMComponentWithTag(root, "input");

TestUtilsExtended.Simulate.change(nameInput, {
    target: {
        value : "alice"
    }
} as unknown as EventTarget);