在 onClick 道具中使用联合类型

use union type in onClick prop

我正在使用 React 和打字稿 我有一个接口,我在 that.in 这个文件中定义了我的类型 我有一个 onClick prop.this 接受了一个函数 value.my 问题是如何我可以为我的 onclick prop.eg:onClick:()=>void | 定义函数重载吗? (number)=>void ETC。 这是我的界面 file.in 换句话说,我希望我的 onClick 道具像我的颜色道具一样可以接受联合类型。

import React from "react";

export interface IButtonText {
    children: React.ReactNode;
    leadingIcon: React.ReactNode;
    className: string;
    color: 'primary' | 'secondary';
    onClick: ()=>void;
}

只是缺少括号:

export interface IButtonText {
    ...
    onClick: (() => void) | ((num: number) => void);
}

但这可能是更好的选择:

export interface IButtonText {
    ...
    onClick: (num?: number) => void;
}

联合类型产生错误


interface IButtonText {
    onClick: (() => void) | ((num: number) => void);
}


const foo = (props: IButtonText) => {
    props.onClick() // error, but should be ok
}

您正在寻找交集而不是并集。

函数交集产生函数重载。

考虑这个例子:



interface IButtonText {
    onClick: (() => void) & ((num: number) => void);
}


const foo = (props: IButtonText) => {
    props.onClick() // ok
    props.onClick(2) // ok

}

这种方法 onClick: (num?: number) => void; 在这种情况下是完全有效的,但如果联合中有两个以上的元素,则很难编写带有可选参数的正确函数类型