首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ReactTestUtils Simulate.Change参数类型SyntheticEventData错误

ReactTestUtils Simulate.Change参数类型SyntheticEventData错误
EN

Stack Overflow用户
提问于 2017-08-30 08:08:41
回答 1查看 561关注 0票数 3

下面的代码是在类型记录中编写的,它使用了“react/test”中的ReactTestUtils。

代码语言:javascript
复制
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)的智能感知

代码语言:javascript
复制
const Simulate.change: (element: React.ReactInstance, eventData?: SyntheticEventData) => void

SyntheticEventData接口的声明中,我发现target属性的类型是EventTarget

代码语言:javascript
复制
export interface OptionalEventProperties {
    // ....
    target?: EventTarget;
}

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

由于代码在放置as any转换时按照预期工作,所以我不太明白这个EventTarget接口是如何工作的。

你们知道移除as any铸件的解决办法吗?因为如果可能的话,我希望尽量减少代码中对any的转换。我想使代码强类型。

EN

回答 1

Stack Overflow用户

发布于 2020-07-06 02:49:32

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

代码语言:javascript
复制
let nameInput = TestUtilsExtended.findRenderedDOMComponentWithTag(root, "input");

TestUtilsExtended.Simulate.change(nameInput, {
    target: {
        value : "alice"
    }
} as unknown as EventTarget);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45955158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档