使用样式组件时,不兼容的蚂蚁设计Menuprops

发布于 2025-01-25 21:39:45 字数 2704 浏览 2 评论 0原文

我正在使用TypeScript的Ant Design,并且正在尝试创建ANTD菜单组件的样式组件包装器,我的文件就是这样:

// Wrapper.tsx
import { MenuProps } from "antd";

// Styles
import { StyledMenu } from "./styles";

const Menu = (props: MenuProps) => {
  return <StyledMenu {...props} />; // Typescript error when spreading props
};

export default Menu;

// styles.ts
import styled from "styled-components";
import { Menu, MenuProps } from "antd";

export const StyledMenu = styled(Menu)<MenuProps>``;

但是由于某种原因,在将包装器道具传播到样式的情况下,我会遇到打字稿错误组件(这没有任何意义,因为Menuprops在两个文件中都是相同的),而且我不知道这是什么问题。打字稿错误消息是:

(alias) const StyledMenu: StyledComponent<typeof Menu, DefaultTheme, MenuProps, never>
import StyledMenu

No overload matches this call.
  Overload 1 of 2, '(props: { items?: ItemType[] | undefined; onClick?: MenuClickEventHandler | undefined; onSelect?: SelectEventHandler | undefined; ... 285 more ...; key?: Key | ... 1 more ... | undefined; } & { ...; } & { ...; }): ReactElement<...>', gave the following error.
    Type '{ theme?: MenuTheme | undefined; inlineIndent?: number | undefined; _internalDisableMenuItemTitleTooltip?: boolean | undefined; items?: ItemType[] | undefined; ... 283 more ...; _internalRenderSubMenuItem?: ((originNode: ReactElement<...>, subMenuItemProps: any, stateProps: { ...; }) => ReactElement<...>) | undefine...' is not assignable to type '{ theme?: DefaultTheme | undefined; }'.
      Types of property 'theme' are incompatible.
        Type 'MenuTheme | undefined' is not assignable to type 'DefaultTheme | undefined'.
          Type 'string' is not assignable to type 'DefaultTheme'.
Overload 2 of 2, '(props: StyledComponentPropsWithAs<typeof Menu, DefaultTheme, MenuProps, never, typeof Menu, typeof Menu>): ReactElement<StyledComponentPropsWithAs<typeof Menu, ... 4 more ..., typeof Menu>, string | JSXElementConstructor<...>>', gave the following error.
    Type '{ theme?: MenuTheme | undefined; inlineIndent?: number | undefined; _internalDisableMenuItemTitleTooltip?: boolean | undefined; items?: ItemType[] | undefined; ... 283 more ...; _internalRenderSubMenuItem?: ((originNode: ReactElement<...>, subMenuItemProps: any, stateProps: { ...; }) => ReactElement<...>) | undefine...' is not assignable to type '{ theme?: DefaultTheme | undefined; }'.
      Types of property 'theme' are incompatible.
        Type 'MenuTheme | undefined' is not assignable to type 'DefaultTheme | undefined'.ts(2769)

有人知道它会是什么吗?

EDIT1:创建一个没有样式组件的包装器,可以按预期工作,因此与样式组件有关

I'm using Ant Design with typescript and I'm trying to create a styled component wrapper of the Antd Menu component, my files are this way:

// Wrapper.tsx
import { MenuProps } from "antd";

// Styles
import { StyledMenu } from "./styles";

const Menu = (props: MenuProps) => {
  return <StyledMenu {...props} />; // Typescript error when spreading props
};

export default Menu;

// styles.ts
import styled from "styled-components";
import { Menu, MenuProps } from "antd";

export const StyledMenu = styled(Menu)<MenuProps>``;

But for some reason, I'm getting a typescript error when spreading wrapper props into the styled component (which doesn't make any sense because MenuProps are the same in both files), and I have no idea what could it be the problem. The typescript error message is:

(alias) const StyledMenu: StyledComponent<typeof Menu, DefaultTheme, MenuProps, never>
import StyledMenu

No overload matches this call.
  Overload 1 of 2, '(props: { items?: ItemType[] | undefined; onClick?: MenuClickEventHandler | undefined; onSelect?: SelectEventHandler | undefined; ... 285 more ...; key?: Key | ... 1 more ... | undefined; } & { ...; } & { ...; }): ReactElement<...>', gave the following error.
    Type '{ theme?: MenuTheme | undefined; inlineIndent?: number | undefined; _internalDisableMenuItemTitleTooltip?: boolean | undefined; items?: ItemType[] | undefined; ... 283 more ...; _internalRenderSubMenuItem?: ((originNode: ReactElement<...>, subMenuItemProps: any, stateProps: { ...; }) => ReactElement<...>) | undefine...' is not assignable to type '{ theme?: DefaultTheme | undefined; }'.
      Types of property 'theme' are incompatible.
        Type 'MenuTheme | undefined' is not assignable to type 'DefaultTheme | undefined'.
          Type 'string' is not assignable to type 'DefaultTheme'.
Overload 2 of 2, '(props: StyledComponentPropsWithAs<typeof Menu, DefaultTheme, MenuProps, never, typeof Menu, typeof Menu>): ReactElement<StyledComponentPropsWithAs<typeof Menu, ... 4 more ..., typeof Menu>, string | JSXElementConstructor<...>>', gave the following error.
    Type '{ theme?: MenuTheme | undefined; inlineIndent?: number | undefined; _internalDisableMenuItemTitleTooltip?: boolean | undefined; items?: ItemType[] | undefined; ... 283 more ...; _internalRenderSubMenuItem?: ((originNode: ReactElement<...>, subMenuItemProps: any, stateProps: { ...; }) => ReactElement<...>) | undefine...' is not assignable to type '{ theme?: DefaultTheme | undefined; }'.
      Types of property 'theme' are incompatible.
        Type 'MenuTheme | undefined' is not assignable to type 'DefaultTheme | undefined'.ts(2769)

Does anyone know what could it be?

EDIT1: Creating a wrapper without styled-components works as expected, so its something related to styled-components

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文