我在下面的代码中写了这个代码,它使用了#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
。我想强制输入代码。
答案 0 :(得分:0)
您需要强制转换为未知,然后将其强制转换为EventTarget
let nameInput = TestUtilsExtended.findRenderedDOMComponentWithTag(root, "input");
TestUtilsExtended.Simulate.change(nameInput, {
target: {
value : "alice"
}
} as unknown as EventTarget);