【发布时间】:2020-02-13 11:48:50
【问题描述】:
我正在使用 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 组件的正确方法是什么?
【问题讨论】:
标签: javascript reactjs typescript material-ui