下面的代码是用 typescript 编写的,它使用“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”类型的参数。属性“目标”的类型不兼容。输入'{值:字符串;}' 不可分配给类型 'EventTarget'。对象字面量只能指定已知属性,而“值”不存在于“EventTarget”类型中。
这是Simulate.change
我从中得到的智能感知@types/react-dom (version: ^15.5.4)
:
const Simulate.change: (element: React.ReactInstance, eventData?: SyntheticEventData) => void
在SyntheticEventData
接口的声明中,我发现target
属性的类型是JavascriptEventTarget
:
export interface OptionalEventProperties {
// ....
target?: EventTarget;
}
export interface SyntheticEventData extends OptionalEventProperties {
// ....
}
由于代码在我进行as any
强制转换时按预期工作,所以我不太明白这个EventTarget
界面是如何工作的。
各位大佬知道去除掉色块的方法as any
吗?因为如果可能的话,我想尽量减少any
代码中的任何内容。我想让代码强类型。