Skip to content

Commit 2c2c070

Browse files
committed
perf: ts type, close #5044
1 parent 18cc95f commit 2c2c070

File tree

42 files changed

+115
-108
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+115
-108
lines changed

components/_util/hooks/useConfigInject.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import type { RequiredMark } from '../../form/Form';
2-
import type { ComputedRef, UnwrapRef, VNodeChild } from 'vue';
2+
import type { ComputedRef, UnwrapRef } from 'vue';
33
import { computed, inject } from 'vue';
44
import type { ConfigProviderProps, Direction, SizeType } from '../../config-provider';
55
import { defaultConfigProvider } from '../../config-provider';
6+
import type { VueNode } from '../type';
67

78
export default (
89
name: string,
@@ -20,7 +21,7 @@ export default (
2021
requiredMark?: RequiredMark;
2122
}>;
2223
autoInsertSpaceInButton: ComputedRef<boolean>;
23-
renderEmpty?: ComputedRef<(componentName?: string) => VNodeChild | JSX.Element>;
24+
renderEmpty?: ComputedRef<(componentName?: string) => VueNode>;
2425
virtual: ComputedRef<boolean>;
2526
dropdownMatchSelectWidth: ComputedRef<boolean | number>;
2627
getPopupContainer: ComputedRef<ConfigProviderProps['getPopupContainer']>;

components/_util/type.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { App, PropType, VNodeChild, Plugin, Ref } from 'vue';
1+
import type { App, PropType, Plugin, Ref, VNode } from 'vue';
22

33
// https://stackoverflow.com/questions/46176165/ways-to-get-string-literal-type-of-array-values-without-enum-overhead
44
export const tuple = <T extends string[]>(...args: T) => args;
@@ -29,7 +29,8 @@ export interface PropOptions<T = any, D = T> {
2929
validator?(value: unknown): boolean;
3030
}
3131

32-
export type VueNode = VNodeChild | JSX.Element;
32+
declare type VNodeChildAtom = VNode | string | number | boolean | null | undefined | void;
33+
export type VueNode = VNodeChildAtom | VNodeChildAtom[] | JSX.Element;
3334

3435
export const withInstall = <T>(comp: T) => {
3536
const c = comp as any;

components/_util/vue-types/index.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ PropTypes.extend([
2626
default: undefined,
2727
},
2828
{
29-
name: 'VNodeChild',
29+
name: 'VueNode',
3030
getter: true,
3131
type: null,
3232
},
@@ -39,5 +39,5 @@ export function withUndefined<T extends { default?: any }>(type: T): T {
3939
export default PropTypes as VueTypesInterface & {
4040
readonly looseBool: VueTypeValidableDef<boolean>;
4141
readonly style: VueTypeValidableDef<CSSProperties>;
42-
readonly VNodeChild: VueTypeValidableDef<VueNode>;
42+
readonly VueNode: VueTypeValidableDef<VueNode>;
4343
};

components/alert/index.tsx

+5-5
Original file line numberDiff line numberDiff line change
@@ -45,19 +45,19 @@ const alertProps = {
4545
/** Whether Alert can be closed */
4646
closable: PropTypes.looseBool,
4747
/** Close text to show */
48-
closeText: PropTypes.VNodeChild,
48+
closeText: PropTypes.any,
4949
/** Content of Alert */
50-
message: PropTypes.VNodeChild,
50+
message: PropTypes.any,
5151
/** Additional content of Alert */
52-
description: PropTypes.VNodeChild,
52+
description: PropTypes.any,
5353
/** Trigger when animation ending of Alert */
5454
afterClose: PropTypes.func.def(noop),
5555
/** Whether to show icon */
5656
showIcon: PropTypes.looseBool,
5757
prefixCls: PropTypes.string,
5858
banner: PropTypes.looseBool,
59-
icon: PropTypes.VNodeChild,
60-
onClose: PropTypes.VNodeChild,
59+
icon: PropTypes.any,
60+
onClose: PropTypes.any,
6161
};
6262

6363
export type AlertProps = Partial<ExtractPropTypes<typeof alertProps>>;

components/anchor/AnchorLink.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { useInjectAnchor } from './context';
99
const anchorLinkProps = {
1010
prefixCls: PropTypes.string,
1111
href: PropTypes.string.def('#'),
12-
title: PropTypes.VNodeChild,
12+
title: PropTypes.any,
1313
target: PropTypes.string,
1414
};
1515

components/avatar/Avatar.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ export const avatarProps = {
2323
src: PropTypes.string,
2424
/** Srcset of image avatar */
2525
srcset: PropTypes.string,
26-
icon: PropTypes.VNodeChild,
26+
icon: PropTypes.any,
2727
alt: PropTypes.string,
2828
gap: PropTypes.number,
2929
draggable: PropTypes.bool,

components/badge/Badge.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export const badgeProps = {
2626
2727
size: PropTypes.oneOf(tuple('default', 'small')).def('default'),
2828
color: PropTypes.string,
29-
text: PropTypes.VNodeChild,
29+
text: PropTypes.any,
3030
offset: PropTypes.arrayOf(PropTypes.oneOfType([String, Number])),
3131
numberStyle: PropTypes.style,
3232
title: PropTypes.string,

components/button/buttonTypes.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ const buttonProps = () => ({
3636
ghost: PropTypes.looseBool,
3737
block: PropTypes.looseBool,
3838
danger: PropTypes.looseBool,
39-
icon: PropTypes.VNodeChild,
39+
icon: PropTypes.any,
4040
href: PropTypes.string,
4141
target: PropTypes.string,
4242
title: PropTypes.string,

components/carousel/index.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ export const CarouselProps = {
2020
// style: PropTypes.React.CSSProperties,
2121
prefixCls: PropTypes.string,
2222
accessibility: PropTypes.looseBool,
23-
nextArrow: PropTypes.VNodeChild,
24-
prevArrow: PropTypes.VNodeChild,
23+
nextArrow: PropTypes.any,
24+
prevArrow: PropTypes.any,
2525
pauseOnHover: PropTypes.looseBool,
2626
// className: PropTypes.string,
2727
adaptiveHeight: PropTypes.looseBool,

components/cascader/index.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ const cascaderProps = {
133133
type: [Boolean, Object] as PropType<boolean | ShowSearchType | undefined>,
134134
default: undefined as PropType<boolean | ShowSearchType | undefined>,
135135
},
136-
notFoundContent: PropTypes.VNodeChild,
136+
notFoundContent: PropTypes.any,
137137
loadData: PropTypes.func,
138138
/** 次级菜单的展开方式,可选 'click' 和 'hover' */
139139
expandTrigger: PropTypes.oneOf(tuple('click', 'hover')),
@@ -147,7 +147,7 @@ const cascaderProps = {
147147
popupVisible: PropTypes.looseBool,
148148
fieldNames: { type: Object as PropType<FieldNamesType> },
149149
autofocus: PropTypes.looseBool,
150-
suffixIcon: PropTypes.VNodeChild,
150+
suffixIcon: PropTypes.any,
151151
showSearchRender: PropTypes.any,
152152
onChange: PropTypes.func,
153153
onPopupVisibleChange: PropTypes.func,

components/comment/index.tsx

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
import type { ExtractPropTypes } from 'vue';
22
import { defineComponent } from 'vue';
3-
import PropsTypes from '../_util/vue-types';
3+
import PropTypes from '../_util/vue-types';
44
import { flattenChildren } from '../_util/props-util';
55
import type { VueNode } from '../_util/type';
66
import { withInstall } from '../_util/type';
77
import useConfigInject from '../_util/hooks/useConfigInject';
88
export const commentProps = {
9-
actions: PropsTypes.array,
9+
actions: PropTypes.array,
1010
/** The element to display as the comment author. */
11-
author: PropsTypes.VNodeChild,
11+
author: PropTypes.any,
1212
/** The element to display as the comment avatar - generally an antd Avatar */
13-
avatar: PropsTypes.VNodeChild,
13+
avatar: PropTypes.any,
1414
/** The main content of the comment */
15-
content: PropsTypes.VNodeChild,
15+
content: PropTypes.any,
1616
/** Comment prefix defaults to '.ant-comment' */
17-
prefixCls: PropsTypes.string,
17+
prefixCls: PropTypes.string,
1818
/** A datetime element containing the time to be displayed */
19-
datetime: PropsTypes.VNodeChild,
19+
datetime: PropTypes.any,
2020
};
2121

2222
export type CommentProps = Partial<ExtractPropTypes<typeof commentProps>>;

components/config-provider/renderEmpty.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import type { VNodeChild } from 'vue';
21
import { inject } from 'vue';
32
import Empty from '../empty';
43
import { defaultConfigProvider } from '.';
4+
import type { VueNode } from '../_util/type';
55

66
export interface RenderEmptyProps {
77
componentName?: string;
@@ -31,7 +31,7 @@ const RenderEmpty = (props: RenderEmptyProps) => {
3131
return renderHtml(props.componentName);
3232
};
3333

34-
function renderEmpty(componentName?: string): VNodeChild | JSX.Element {
34+
function renderEmpty(componentName?: string): VueNode {
3535
return <RenderEmpty componentName={componentName} />;
3636
}
3737

components/descriptions/index.tsx

+3-3
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export const DescriptionsItemProps = {
2828

2929
const descriptionsItemProp = {
3030
prefixCls: PropTypes.string,
31-
label: PropTypes.VNodeChild,
31+
label: PropTypes.any,
3232
labelStyle: PropTypes.style,
3333
contentStyle: PropTypes.style,
3434
span: PropTypes.number.def(1),
@@ -125,8 +125,8 @@ const descriptionsProps = {
125125
prefixCls: PropTypes.string,
126126
bordered: PropTypes.looseBool,
127127
size: PropTypes.oneOf(tuple('default', 'middle', 'small')).def('default'),
128-
title: PropTypes.VNodeChild,
129-
extra: PropTypes.VNodeChild,
128+
title: PropTypes.any,
129+
extra: PropTypes.any,
130130
column: {
131131
type: [Number, Object] as PropType<number | Partial<Record<Breakpoint, number>>>,
132132
default: (): number | Partial<Record<Breakpoint, number>> => DEFAULT_COLUMN_MAP,

components/drawer/index.tsx

+5-5
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ const defaultPushState: PushState = { distance: 180 };
3535
const drawerProps = () => ({
3636
autofocus: PropTypes.looseBool,
3737
closable: PropTypes.looseBool,
38-
closeIcon: PropTypes.VNodeChild,
38+
closeIcon: PropTypes.any,
3939
destroyOnClose: PropTypes.looseBool,
4040
forceRender: PropTypes.looseBool,
4141
getContainer: PropTypes.any,
@@ -55,7 +55,7 @@ const drawerProps = () => ({
5555
headerStyle: PropTypes.object,
5656
bodyStyle: PropTypes.object,
5757
contentWrapperStyle: PropTypes.object,
58-
title: PropTypes.VNodeChild,
58+
title: PropTypes.any,
5959
visible: PropTypes.looseBool,
6060
width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
6161
height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
@@ -64,12 +64,12 @@ const drawerProps = () => ({
6464
push: PropTypes.oneOfType([PropTypes.looseBool, { type: Object as PropType<PushState> }]),
6565
placement: PropTypes.oneOf(PlacementTypes),
6666
keyboard: PropTypes.looseBool,
67-
extra: PropTypes.VNodeChild,
68-
footer: PropTypes.VNodeChild,
67+
extra: PropTypes.any,
68+
footer: PropTypes.any,
6969
footerStyle: PropTypes.object,
7070
level: PropTypes.any,
7171
levelMove: PropTypes.any,
72-
handle: PropTypes.VNodeChild,
72+
handle: PropTypes.any,
7373
/** @deprecated Use `@afterVisibleChange` instead */
7474
afterVisibleChange: PropTypes.func,
7575
});

components/form/FormItem.tsx

+3-3
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,9 @@ function getPropByPath(obj: any, namePathList: any, strict?: boolean) {
7676
export const formItemProps = {
7777
htmlFor: PropTypes.string,
7878
prefixCls: PropTypes.string,
79-
label: PropTypes.VNodeChild,
80-
help: PropTypes.VNodeChild,
81-
extra: PropTypes.VNodeChild,
79+
label: PropTypes.any,
80+
help: PropTypes.any,
81+
extra: PropTypes.any,
8282
labelCol: { type: Object as PropType<ColProps> },
8383
wrapperCol: { type: Object as PropType<ColProps> },
8484
hasFeedback: PropTypes.looseBool.def(false),

components/layout/Sider.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ export const siderProps = {
3030
defaultCollapsed: PropTypes.looseBool,
3131
reverseArrow: PropTypes.looseBool,
3232
zeroWidthTriggerStyle: PropTypes.style,
33-
trigger: PropTypes.VNodeChild,
33+
trigger: PropTypes.any,
3434
width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
3535
collapsedWidth: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
3636
breakpoint: PropTypes.oneOf(tuple('xs', 'sm', 'md', 'lg', 'xl', 'xxl', 'xxxl')),

components/menu/src/ItemGroup.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { useInjectMenu } from './hooks/useMenuContext';
66
import { useMeasure } from './hooks/useKeyPath';
77

88
const menuItemGroupProps = {
9-
title: PropTypes.VNodeChild,
9+
title: PropTypes.any,
1010
};
1111

1212
export type MenuItemGroupProps = Partial<ExtractPropTypes<typeof menuItemGroupProps>>;

components/menu/src/MenuItem.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ const menuItemProps = {
1919
disabled: Boolean,
2020
danger: Boolean,
2121
title: { type: [String, Boolean], default: undefined },
22-
icon: PropTypes.VNodeChild,
22+
icon: PropTypes.any,
2323
};
2424

2525
export type MenuItemProps = Partial<ExtractPropTypes<typeof menuItemProps>>;

components/menu/src/SubMenu.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ import isValid from '../../_util/isValid';
2323
let indexGuid = 0;
2424

2525
const subMenuProps = {
26-
icon: PropTypes.VNodeChild,
27-
title: PropTypes.VNodeChild,
26+
icon: PropTypes.any,
27+
title: PropTypes.any,
2828
disabled: Boolean,
2929
level: Number,
3030
popupClassName: String,

components/page-header/index.tsx

+5-5
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@ import classNames from '../_util/classNames';
1414
import ResizeObserver from '../vc-resize-observer';
1515

1616
export const pageHeaderProps = {
17-
backIcon: PropTypes.VNodeChild,
17+
backIcon: PropTypes.any,
1818
prefixCls: PropTypes.string,
19-
title: PropTypes.VNodeChild,
20-
subTitle: PropTypes.VNodeChild,
19+
title: PropTypes.any,
20+
subTitle: PropTypes.any,
2121
breadcrumb: PropTypes.object,
2222
tags: PropTypes.any,
23-
footer: PropTypes.VNodeChild,
24-
extra: PropTypes.VNodeChild,
23+
footer: PropTypes.any,
24+
extra: PropTypes.any,
2525
avatar: PropTypes.object,
2626
ghost: PropTypes.looseBool,
2727
onBack: PropTypes.func,

components/progress/Steps.tsx

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
import type { ExtractPropTypes, PropType, VNodeChild } from 'vue';
1+
import type { ExtractPropTypes, PropType } from 'vue';
22
import { computed, defineComponent } from 'vue';
3+
import type { VueNode } from '../_util/type';
34
import PropTypes from '../_util/vue-types';
45
import type { ProgressSize } from './props';
56
import { progressProps } from './props';
@@ -25,7 +26,7 @@ export default defineComponent({
2526
const styledSteps = computed(() => {
2627
const { steps, strokeWidth = 8, strokeColor, trailColor, prefixCls } = props;
2728

28-
const temp: VNodeChild[] = [];
29+
const temp: VueNode[] = [];
2930
for (let i = 0; i < steps; i += 1) {
3031
const cls = {
3132
[`${prefixCls}-steps-item`]: true,

components/progress/progress.tsx

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import type { VNodeChild } from 'vue';
21
import { computed, defineComponent } from 'vue';
32
import initDefaultProps from '../_util/props-util/initDefaultProps';
43
import CloseOutlined from '@ant-design/icons-vue/CloseOutlined';
@@ -12,6 +11,7 @@ import { getSuccessPercent, validProgress } from './utils';
1211
import useConfigInject from '../_util/hooks/useConfigInject';
1312
import devWarning from '../vc-util/devWarning';
1413
import { progressProps, progressStatuses } from './props';
14+
import type { VueNode } from '../_util/type';
1515

1616
export default defineComponent({
1717
name: 'AProgress',
@@ -67,7 +67,7 @@ export default defineComponent({
6767
const successPercent = getSuccessPercent(props);
6868
if (!showInfo) return null;
6969

70-
let text: VNodeChild;
70+
let text: VueNode;
7171
const textFormatter = format || slots?.format || ((val: number) => `${val}%`);
7272
const isLineType = type === 'line';
7373
if (
@@ -92,7 +92,7 @@ export default defineComponent({
9292
const { type, steps, strokeColor } = props;
9393
const progressInfo = renderProcessInfo();
9494

95-
let progress: VNodeChild;
95+
let progress: VueNode;
9696
// Render progress shape
9797
if (type === 'line') {
9898
progress = steps ? (

components/progress/props.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import PropTypes from '../_util/vue-types';
2+
import type { VueNode } from '../_util/type';
23
import { tuple } from '../_util/type';
3-
import type { PropType, VNodeChild, ExtractPropTypes } from 'vue';
4+
import type { PropType, ExtractPropTypes } from 'vue';
45

56
export const progressStatuses = tuple('normal', 'exception', 'active', 'success');
67
export type ProgressStatusesType = typeof progressStatuses[number];
@@ -21,7 +22,7 @@ export const progressProps = () => ({
2122
prefixCls: PropTypes.string,
2223
type: PropTypes.oneOf(ProgressType),
2324
percent: PropTypes.number,
24-
format: { type: Function as PropType<(percent?: number, successPercent?: number) => VNodeChild> },
25+
format: { type: Function as PropType<(percent?: number, successPercent?: number) => VueNode> },
2526
status: PropTypes.oneOf(progressStatuses),
2627
showInfo: PropTypes.looseBool,
2728
strokeWidth: PropTypes.number,

components/statistic/Statistic.tsx

+3-3
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ export const statisticProps = {
1919
valueRender: PropTypes.any,
2020
formatter: PropTypes.any,
2121
precision: PropTypes.number,
22-
prefix: PropTypes.VNodeChild,
23-
suffix: PropTypes.VNodeChild,
24-
title: PropTypes.VNodeChild,
22+
prefix: PropTypes.any,
23+
suffix: PropTypes.any,
24+
title: PropTypes.any,
2525
onFinish: PropTypes.func,
2626
loading: PropTypes.looseBool,
2727
};

0 commit comments

Comments
 (0)