import React fron "react"; type ButtonOrLinkProps = | (React.ButtonHTMLAttributes<HTMLButtonElement> & { as?: "Button"}) | (React.AnchorHTMLAttrributes<HTMLAnchorElement>) & { as: "a"}); const ButtonOrLink = (props: ButtonOrLinkProps) => { if(props.as === "a"){ return <a {...props} /> } return <button {...props} /> } /** Use case */ <ButtonOrLink onClick={(e) => {console.log(e)}}/> <ButtonOrLink as="a" onClick={(e) => {console.log(e)}}/>