下面的代码是在类型记录中编写的,它使用了“react/test”中的ReactTestUtils。
let nameInput = TestUtilsExtended.findRenderedDOMComponentWithTag(root, "input");
TestUtilsExtended.Simulate.change(nameInput, {
target: {
value : "alice"
}
} as any);它工作得很好,其结果与我放置as any浇铸时所期望的一样。如果删除铸造,则会发生以下错误:
类型“{ target:{ value: string;};}”的ts参数不能分配给'SyntheticEventData‘类型的参数。属性“目标”的类型是不兼容的。键入“{ value: string;}”不能分配给键入“EventTarget”。对象文字只能指定已知的属性,而'value‘在类型'EventTarget’中不存在。
这是我从Simulate.change获得的对@types/react-dom (version: ^15.5.4)的智能感知
const Simulate.change: (element: React.ReactInstance, eventData?: SyntheticEventData) => void在SyntheticEventData接口的声明中,我发现target属性的类型是EventTarget
export interface OptionalEventProperties {
// ....
target?: EventTarget;
}
export interface SyntheticEventData extends OptionalEventProperties {
// ....
}由于代码在放置as any转换时按照预期工作,所以我不太明白这个EventTarget接口是如何工作的。
你们知道移除as any铸件的解决办法吗?因为如果可能的话,我希望尽量减少代码中对any的转换。我想使代码强类型。
发布于 2020-07-06 02:49:32
您需要将其转换为未知,然后将其转换为EventTarget
let nameInput = TestUtilsExtended.findRenderedDOMComponentWithTag(root, "input");
TestUtilsExtended.Simulate.change(nameInput, {
target: {
value : "alice"
}
} as unknown as EventTarget);https://stackoverflow.com/questions/45955158
复制相似问题