ts那些记得有些烦的定义
// 来自antd的menu组件定义
export interface SelectParam {
key: string;
keyPath: Array<string>;
item: any;
domEvent: Event;
selectedKeys: Array<string>;
}
export interface ClickParam {
key: string;
keyPath: Array<string>;
item: any;
domEvent: Event;
}
export declare type MenuMode = 'vertical' | 'vertical-left' | 'vertical-right' | 'horizontal' | 'inline';
export interface MenuProps {
id?: string;
theme?: MenuTheme;
mode?: MenuMode;
selectable?: boolean;
selectedKeys?: Array<string>;
defaultSelectedKeys?: Array<string>;
openKeys?: Array<string>;
defaultOpenKeys?: Array<string>;
onOpenChange?: (openKeys: string[]) => void;
onSelect?: (param: SelectParam) => void;
onDeselect?: (param: SelectParam) => void;
onClick?: (param: ClickParam) => void;
style?: React.CSSProperties;
openAnimation?: string;
openTransitionName?: string;
motion?: Object;
className?: string;
prefixCls?: string;
multiple?: boolean;
inlineIndent?: number;
inlineCollapsed?: boolean;
subMenuCloseDelay?: number;
subMenuOpenDelay?: number;
focusable?: boolean;
onMouseEnter?: (e: MouseEvent) => void;
getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement;
overflowedIndicator?: React.ReactNode;
forceSubMenuRender?: boolean;
}
最近常用的:
const modalForm = useRef<any>(null);
const [data, setList] = useState<any[]>([]);
const [simpleTreeList, setSimpleTreeList] = useState<never[]>([]);
const [relaCity, setRelaCity] = useState<{
id: string;
areaList: Array<{ addressCode: string; addressName: string }>;
}>();
type和interface
相同点:他们都是用来定义对象(或函数形状)的,都支持继承并可以互相继承。
不同点:
-写法不同,一个是type example = {},一个是 interface excample {}
- type可以定义基本类型的别名,比如:type myString = string;
- type可以通过typeof操作符进行定义,比如:type myType = typeof myObj;
- type可以声明联合类型,比如:type unionType = myType | myType2;
- type可以声明元组类型,比如:type yuanzu = [myType, myType2];
- interface可以声明合并(若是type则会报【重复定义】的警告),比如:
interface myInterface {
name: string;
}
interface myInterface {
age: nuber;
}
那么myInterface 最后为:
{
name: string;
age: nuber;
}
declare
以declare生命的变量和模块,其他地方无需引入即可使用(需要在配置文件下引入声明文件,之后在include包含的文件范围内都可直接使用)

浙公网安备 33010602011771号