【问题标题】:onSelect event handler typescript type for react bootstrap DropDown用于反应引导 DropDown 的 onSelect 事件处理程序打字稿类型
【发布时间】:2023-03-24 15:58:02
【问题描述】:

我将 React 与 typescript 和 react-bootstrap 一起使用来创建下拉列表:

ipc__handleSelect = (eventKey: any, event: any) => {
}

render() {

    return (
        <Dropdown>
            <Dropdown.Toggle>Text</Dropdown.Toggle>
            <Dropdown.Menu>
                <Dropdown.Item
                    key         = 'key1'
                    eventKey    = 'key1'
                    onSelect    = {this.ipc__handleSelect}
                >Item</Dropdown.Item>
            </Dropdown.Menu>
        </Dropdown>
    );
}

帮助识别数据类型

  1. event: any - 我应该写什么类型?

  2. eventKey: any - 我应该写什么类型?

当我写eventKey: string(因为键是字符串)时,我得到错误:

Type '(eventKey: string, event: any) => void' 不可分配给 输入“选择回调”。参数类型“eventKey”和 'eventKey' 不兼容。 键入'字符串 | null' 不可分配给类型 'string'。 类型 'null' 不能分配给类型 'string'。

为什么null会出现在那里?

【问题讨论】:

    标签: reactjs typescript types bootstrap-4 react-bootstrap


    【解决方案1】:

    如果您查看 react-bootstrap 库代码,您将看到下拉菜单。 Item 有一个 SelectCallback 类型的 onSelect,SelectCallback 是这样的:

    export type SelectCallback = (
      eventKey: string | null,
      e: React.SyntheticEvent<unknown>,
    ) => void;
    

    由于您指定您的处理程序只接受字符串类型,并且下拉项 onSelect 将字符串 | null 提供给 eventKey,因此您收到无法映射的错误。

    【讨论】:

    • 如果我写eventKey: string | null,则显示错误Type 'string | null' is not assignable to type 'string | undefined',如果写event: React.SyntheticEvent&lt;unknown&gt; - 错误:Property 'className' does not exist on type 'EventTarget'.event.target.className 中使用event.target.className 时@
    • 我没有得到第一个错误,它说Type 'string | null' is not assignable to type 'string | undefined',当我尝试它时,你使用的是什么版本的 react-bootstrap 和 typescript?对于第二个,由于 event.target 的类型是 EventTarget,为了获得 HTML 属性,你必须像这样将它转换为 HTMLElement (event.target as HTMLElement).className
    猜你喜欢
    • 2019-06-20
    • 2021-12-30
    • 2017-06-24
    • 2018-10-26
    • 1970-01-01
    • 2018-01-21
    • 1970-01-01
    • 1970-01-01
    • 2023-02-14
    相关资源
    最近更新 更多