最近看antd源码的时候,看到有些ts的写法不太理解,想问下
,下面的Omit<React.HTMLAttributes<HTMLDivElement>, 'title'>
是什么意思呢?下面是源码
export interface CardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {
prefixCls?: string;
title?: React.ReactNode;
extra?: React.ReactNode;
bordered?: boolean;
headStyle?: React.CSSProperties;
bodyStyle?: React.CSSProperties;
style?: React.CSSProperties;
loading?: boolean;
noHovering?: boolean;
hoverable?: boolean;
children?: React.ReactNode;
id?: string;
className?: string;
size?: CardSize;
type?: CardType;
cover?: React.ReactNode;
actions?: React.ReactNode[];
tabList?: CardTabListType[];
tabBarExtraContent?: React.ReactNode | null;
onTabChange?: (key: string) => void;
activeTabKey?: string;
defaultActiveTabKey?: string;
}
是
Omit<T>
这个内置类型不理解吗?它表示一个在
T
的基础上去除某个字段的新类型。你这里的例子就表示,
Omit<React.HTMLAttributes<HTMLDivElement>, 'title'>
是一个结构跟React.HTMLAttributes<HTMLDivElement>
一样、但是去除了title
这个属性的一个类型。至于为什么要去除,看下文这个子类型也有
title
属性,但是属性的类型和父类里的应该并不一样,所以要先把父类里的去掉、在子类中添加。