gpt4 book ai didi

javascript - 扩展 Material UI ListItem 的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-03 09:36:55 24 4
gpt4 key购买 nike

我正在使用 TypeScript 3.4.5 和 Material UI 4.2 以及以下代码:

interface MyItemProps {
name: string;
value: string;
}

function Item({ name, value, ...props }: ListItemProps<'li', MyItemProps>): ReactElement {
return (
<ListItem {...props} className="item">
<ListItemText primary={name} secondary={value || '-'} />
</ListItem>
);
}

我收到 Type 'boolean' is not assignable to type 'true'错误。 为什么?

我一直在研究 ListItem 的类型定义,但我不知道发生了什么:
export interface ListItemTypeMap<P, D extends React.ElementType> {
props: P & {
alignItems?: 'flex-start' | 'center';
autoFocus?: boolean;
button?: boolean;
ContainerComponent?: React.ElementType<React.HTMLAttributes<HTMLDivElement>>;
ContainerProps?: React.HTMLAttributes<HTMLDivElement>;
dense?: boolean;
disabled?: boolean;
disableGutters?: boolean;
divider?: boolean;
focusVisibleClassName?: string;
selected?: boolean;
};
defaultComponent: D;
classKey: ListItemClassKey;
}

declare const ListItem: OverridableComponent<ListItemTypeMap<{ button?: false }, 'li'>> &
ExtendButtonBase<ListItemTypeMap<{ button: true }, 'div'>>;

export type ListItemClassKey =
| 'root'
| 'container'
| 'focusVisible'
| 'default'
| 'dense'
| 'disabled'
| 'divider'
| 'gutters'
| 'button'
| 'secondaryAction'
| 'selected';

export type ListItemProps<D extends React.ElementType = 'li', P = {}> = OverrideProps<
ListItemTypeMap<P, D>,
D
>;

export default ListItem;

我唯一想到的是“类型扩大”,但我真的不知道发生了什么以及为什么。

有人可以解释发生了什么吗?最重要的是,扩展 Material UI 组件的正确方法是什么?

最佳答案

这似乎是 well established issue在material-ui github上。显然,它源于使用 bool 值来进行工会歧视——我对 TS 还是新手,所以只能大致了解这意味着什么!
我从这些线程中找到的最干净的方法是通过转换 button直接在 any 上为真:

interface MyItemProps {
name: string;
value: string;
}

type MyListItem = ListItemProps<"li", MyItemProps>;

function Item({ name, value, button, ...props }: MyListItem): ReactElement {
return (
<ListItem {...props} className="item" button={button as true}>
<ListItemText primary={name} secondary={value || '-'} />
</ListItem>
);
}

关于javascript - 扩展 Material UI ListItem 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58417671/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com