Skip to content

Commit aa9ba7f

Browse files
Amour1688tangjinzhou
authored andcommitted
fix: typescript compile error
1 parent 6b1f38c commit aa9ba7f

File tree

8 files changed

+237
-133
lines changed

8 files changed

+237
-133
lines changed

components/calendar/dayjs.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
import type { Dayjs } from 'dayjs';
21
import generateConfig from '../vc-picker/generate/dayjs';
32
import { withInstall } from '../_util/type';
43
import type { CalendarProps } from './generateCalendar';
54
import generateCalendar from './generateCalendar';
65

7-
const Calendar = generateCalendar<Dayjs>(generateConfig);
6+
const Calendar = generateCalendar(generateConfig);
87

98
export type { CalendarProps };
109
export default withInstall(Calendar);

components/calendar/generateCalendar.tsx

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,10 @@ export interface CalendarProps<DateType> {
6565
valueFormat?: string;
6666
}
6767

68-
function generateCalendar<DateType>(generateConfig: GenerateConfig<DateType>) {
68+
function generateCalendar<
69+
DateType,
70+
Props extends CalendarProps<DateType> = CalendarProps<DateType>,
71+
>(generateConfig: GenerateConfig<DateType>) {
6972
function isSameYear(date1: DateType, date2: DateType) {
7073
return date1 && date2 && generateConfig.getYear(date1) === generateConfig.getYear(date2);
7174
}
@@ -82,28 +85,9 @@ function generateCalendar<DateType>(generateConfig: GenerateConfig<DateType>) {
8285
);
8386
}
8487

85-
const Calendar = defineComponent<CalendarProps<DateType>>({
88+
const Calendar = defineComponent<Props>({
8689
name: 'ACalendar',
8790
inheritAttrs: false,
88-
props: [
89-
'prefixCls',
90-
'locale',
91-
'validRange',
92-
'disabledDate',
93-
'dateFullCellRender',
94-
'dateCellRender',
95-
'monthFullCellRender',
96-
'monthCellRender',
97-
'headerRender',
98-
'value',
99-
'defaultValue',
100-
'mode',
101-
'fullscreen',
102-
'onChange',
103-
'onPanelChange',
104-
'onSelect',
105-
'valueFormat',
106-
] as any,
10791
emits: ['change', 'panelChange', 'select', 'update:value'],
10892
slots: [
10993
'dateFullCellRender',
@@ -303,7 +287,6 @@ function generateCalendar<DateType>(generateConfig: GenerateConfig<DateType>) {
303287
onModeChange={triggerModeChange}
304288
/>
305289
)}
306-
307290
<PickerPanel
308291
value={mergedValue.value}
309292
prefixCls={prefixCls.value}
@@ -322,11 +305,33 @@ function generateCalendar<DateType>(generateConfig: GenerateConfig<DateType>) {
322305
};
323306
},
324307
});
308+
309+
Calendar.props = [
310+
'prefixCls',
311+
'locale',
312+
'validRange',
313+
'disabledDate',
314+
'dateFullCellRender',
315+
'dateCellRender',
316+
'monthFullCellRender',
317+
'monthCellRender',
318+
'headerRender',
319+
'value',
320+
'defaultValue',
321+
'mode',
322+
'fullscreen',
323+
'onChange',
324+
'onPanelChange',
325+
'onSelect',
326+
'valueFormat',
327+
];
328+
325329
Calendar.install = function (app: App) {
326330
app.component(Calendar.name, Calendar);
327331
return app;
328332
};
329-
return Calendar;
333+
334+
return Calendar as unknown as (props: CalendarProps<DateType>) => JSX.Element;
330335
}
331336

332337
export default generateCalendar;

components/date-picker/generatePicker/generateRangePicker.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,18 @@ import type { PanelMode, RangeValue } from '../../vc-picker/interface';
1616
import type { RangePickerSharedProps } from '../../vc-picker/RangePicker';
1717
import devWarning from '../../vc-util/devWarning';
1818

19-
export default function generateRangePicker<DateType, ExtraProps extends {} = {}>(
19+
export default function generateRangePicker<DateType, ExtraProps = {}>(
2020
generateConfig: GenerateConfig<DateType>,
2121
extraProps: ExtraProps,
2222
) {
2323
const RangePicker = defineComponent({
2424
name: 'ARangePicker',
25-
inheritAttrs: false,
2625
props: {
2726
...commonProps<DateType>(),
2827
...rangePickerProps<DateType>(),
2928
...extraProps,
3029
},
30+
inheritAttrs: false,
3131
slots: [
3232
'suffixIcon',
3333
// 'clearIcon',

components/date-picker/generatePicker/generateSinglePicker.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { computed, defineComponent, nextTick, onMounted, ref } from 'vue';
1212
import useConfigInject from '../../_util/hooks/useConfigInject';
1313
import classNames from '../../_util/classNames';
1414
import { commonProps, datePickerProps } from './props';
15+
1516
import devWarning from '../../vc-util/devWarning';
1617

1718
export default function generateSinglePicker<DateType, ExtraProps = {}>(

components/date-picker/generatePicker/index.tsx

Lines changed: 6 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,12 @@
1-
import type { GenerateConfig } from '../../vc-picker/generate/index';
2-
import type {
3-
PickerBaseProps as RCPickerBaseProps,
4-
PickerDateProps as RCPickerDateProps,
5-
PickerTimeProps as RCPickerTimeProps,
6-
} from '../../vc-picker/Picker';
1+
import type { GenerateConfig } from '../../vc-picker/generate';
72
import type { SharedTimeProps } from '../../vc-picker/panels/TimePanel';
8-
import type {
9-
RangePickerBaseProps as RCRangePickerBaseProps,
10-
RangePickerDateProps as RCRangePickerDateProps,
11-
RangePickerTimeProps as RCRangePickerTimeProps,
12-
} from '../../vc-picker/RangePicker';
13-
import type { PickerMode, Locale as RcPickerLocale } from '../../vc-picker/interface';
3+
import type { PickerMode } from '../../vc-picker/interface';
144
import PickerButton from '../PickerButton';
155
import PickerTag from '../PickerTag';
16-
import type { TimePickerLocale } from '../../time-picker';
176
import generateSinglePicker from './generateSinglePicker';
187
import generateRangePicker from './generateRangePicker';
19-
import type { SizeType } from '../../config-provider';
8+
9+
export * from './interface';
2010

2111
export const Components = { button: PickerButton, rangeItem: PickerTag };
2212

@@ -65,67 +55,7 @@ export function getTimeProps<DateType>(
6555
};
6656
}
6757

68-
type InjectDefaultProps<Props> = Omit<
69-
Props,
70-
| 'locale'
71-
| 'generateConfig'
72-
| 'prevIcon'
73-
| 'nextIcon'
74-
| 'superPrevIcon'
75-
| 'superNextIcon'
76-
| 'hideHeader'
77-
| 'components'
78-
> & {
79-
locale?: PickerLocale;
80-
size?: SizeType;
81-
bordered?: boolean;
82-
};
83-
84-
export type PickerLocale = {
85-
lang: RcPickerLocale & AdditionalPickerLocaleLangProps;
86-
timePickerLocale: TimePickerLocale;
87-
} & AdditionalPickerLocaleProps;
88-
89-
export type AdditionalPickerLocaleProps = {
90-
dateFormat?: string;
91-
dateTimeFormat?: string;
92-
weekFormat?: string;
93-
monthFormat?: string;
94-
};
95-
96-
export type AdditionalPickerLocaleLangProps = {
97-
placeholder: string;
98-
yearPlaceholder?: string;
99-
quarterPlaceholder?: string;
100-
monthPlaceholder?: string;
101-
weekPlaceholder?: string;
102-
rangeYearPlaceholder?: [string, string];
103-
rangeMonthPlaceholder?: [string, string];
104-
rangeWeekPlaceholder?: [string, string];
105-
rangePlaceholder?: [string, string];
106-
};
107-
108-
// Picker Props
109-
export type PickerBaseProps<DateType> = InjectDefaultProps<RCPickerBaseProps<DateType>>;
110-
export type PickerDateProps<DateType> = InjectDefaultProps<RCPickerDateProps<DateType>>;
111-
export type PickerTimeProps<DateType> = InjectDefaultProps<RCPickerTimeProps<DateType>>;
112-
113-
export type PickerProps<DateType> =
114-
| PickerBaseProps<DateType>
115-
| PickerDateProps<DateType>
116-
| PickerTimeProps<DateType>;
117-
118-
// Range Picker Props
119-
export type RangePickerBaseProps<DateType> = InjectDefaultProps<RCRangePickerBaseProps<DateType>>;
120-
export type RangePickerDateProps<DateType> = InjectDefaultProps<RCRangePickerDateProps<DateType>>;
121-
export type RangePickerTimeProps<DateType> = InjectDefaultProps<RCRangePickerTimeProps<DateType>>;
122-
123-
export type RangePickerProps<DateType> =
124-
| RangePickerBaseProps<DateType>
125-
| RangePickerDateProps<DateType>
126-
| RangePickerTimeProps<DateType>;
127-
128-
function generatePicker<DateType, ExtraProps extends Record<string, any> = {}>(
58+
function generatePicker<DateType, ExtraProps extends {} = {}>(
12959
generateConfig: GenerateConfig<DateType>,
13060
extraProps?: ExtraProps,
13161
) {
@@ -134,7 +64,7 @@ function generatePicker<DateType, ExtraProps extends Record<string, any> = {}>(
13464
generateSinglePicker<DateType, ExtraProps>(generateConfig, extraProps);
13565

13666
// ======================== Range Picker ========================
137-
const RangePicker = generateRangePicker<DateType>(generateConfig, extraProps);
67+
const RangePicker = generateRangePicker<DateType, ExtraProps>(generateConfig, extraProps);
13868

13969
return {
14070
DatePicker,
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
import type {
2+
PickerBaseProps as RCPickerBaseProps,
3+
PickerDateProps as RCPickerDateProps,
4+
PickerTimeProps as RCPickerTimeProps,
5+
} from '../../vc-picker/Picker';
6+
import type {
7+
RangePickerBaseProps as RCRangePickerBaseProps,
8+
RangePickerDateProps as RCRangePickerDateProps,
9+
RangePickerTimeProps as RCRangePickerTimeProps,
10+
} from '../../vc-picker/RangePicker';
11+
import type { Locale as RcPickerLocale } from '../../vc-picker/interface';
12+
import type { TimePickerLocale } from '../../time-picker';
13+
import type { SizeType } from '../../config-provider';
14+
15+
type InjectDefaultProps<Props> = Omit<
16+
Props,
17+
| 'locale'
18+
| 'generateConfig'
19+
| 'prevIcon'
20+
| 'nextIcon'
21+
| 'superPrevIcon'
22+
| 'superNextIcon'
23+
| 'hideHeader'
24+
| 'components'
25+
> & {
26+
locale?: PickerLocale;
27+
size?: SizeType;
28+
bordered?: boolean;
29+
};
30+
31+
export type PickerLocale = {
32+
lang: RcPickerLocale & AdditionalPickerLocaleLangProps;
33+
timePickerLocale: TimePickerLocale;
34+
} & AdditionalPickerLocaleProps;
35+
36+
export type AdditionalPickerLocaleProps = {
37+
dateFormat?: string;
38+
dateTimeFormat?: string;
39+
weekFormat?: string;
40+
monthFormat?: string;
41+
};
42+
43+
export type AdditionalPickerLocaleLangProps = {
44+
placeholder: string;
45+
yearPlaceholder?: string;
46+
quarterPlaceholder?: string;
47+
monthPlaceholder?: string;
48+
weekPlaceholder?: string;
49+
rangeYearPlaceholder?: [string, string];
50+
rangeMonthPlaceholder?: [string, string];
51+
rangeWeekPlaceholder?: [string, string];
52+
rangePlaceholder?: [string, string];
53+
};
54+
55+
// Picker Props
56+
export type PickerBaseProps<DateType> = InjectDefaultProps<RCPickerBaseProps<DateType>>;
57+
export type PickerDateProps<DateType> = InjectDefaultProps<RCPickerDateProps<DateType>>;
58+
export type PickerTimeProps<DateType> = InjectDefaultProps<RCPickerTimeProps<DateType>>;
59+
60+
export type PickerProps<DateType> =
61+
| PickerBaseProps<DateType>
62+
| PickerDateProps<DateType>
63+
| PickerTimeProps<DateType>;
64+
65+
// Range Picker Props
66+
export type RangePickerBaseProps<DateType> = InjectDefaultProps<RCRangePickerBaseProps<DateType>>;
67+
export type RangePickerDateProps<DateType> = InjectDefaultProps<RCRangePickerDateProps<DateType>>;
68+
export type RangePickerTimeProps<DateType> = InjectDefaultProps<RCRangePickerTimeProps<DateType>>;
69+
70+
export type RangePickerProps<DateType> =
71+
| RangePickerBaseProps<DateType>
72+
| RangePickerDateProps<DateType>
73+
| RangePickerTimeProps<DateType>;

components/date-picker/generatePicker/props.ts

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,44 @@ function commonProps<DateType>() {
7676
};
7777
}
7878

79+
export interface CommonProps<DateType> {
80+
prefixCls?: string;
81+
dropdownClassName?: string;
82+
dropdownAlign?: AlignType;
83+
popupStyle?: CSSProperties;
84+
transitionName?: string;
85+
placeholder?: string;
86+
allowClear?: boolean;
87+
autofocus?: boolean;
88+
disabled?: boolean;
89+
tabindex?: number;
90+
open?: boolean;
91+
defaultOpen?: boolean;
92+
inputReadOnly?: boolean;
93+
suffixIcon?: VueNode;
94+
clearIcon?: VueNode;
95+
prevIcon?: VueNode;
96+
nextIcon?: VueNode;
97+
superPrevIcon?: VueNode;
98+
superNextIcon?: VueNode;
99+
getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement;
100+
panelRender?: (originPanel: VueNode) => VueNode;
101+
role?: string;
102+
name?: string;
103+
autocomplete?: string;
104+
direction?: 'ltr' | 'rtl';
105+
showToday?: boolean;
106+
showTime?: boolean | SharedTimeProps<DateType>;
107+
locale?: PickerLocale;
108+
size?: SizeType;
109+
bordered?: boolean;
110+
dateRender?: DateRender<DateType>;
111+
disabledDate?: (date: DateType) => boolean;
112+
mode?: PanelMode;
113+
picker?: PickerMode;
114+
valueFormat?: string;
115+
}
116+
79117
function datePickerProps<DateType>() {
80118
return {
81119
defaultPickerValue: { type: [String, Object] as PropType<DateType | string> },
@@ -95,6 +133,19 @@ function datePickerProps<DateType>() {
95133
};
96134
}
97135

136+
export interface DatePickerProps<DateType> {
137+
defaultPickerValue?: DateType | string;
138+
defaultValue?: DateType | string;
139+
value?: DateType | string;
140+
disabledTime?: DisabledTime<DateType>;
141+
format?: string | CustomFormat<DateType> | (string | CustomFormat<DateType>)[];
142+
renderExtraFooter?: (mode: PanelMode) => VueNode;
143+
showNow?: boolean;
144+
monthCellRender?: MonthCellRender<DateType>;
145+
// deprecated Please use `monthCellRender"` instead.',
146+
monthCellContentRender?: MonthCellRender<DateType>;
147+
}
148+
98149
function rangePickerProps<DateType>() {
99150
return {
100151
allowEmpty: { type: Array as unknown as PropType<[boolean, boolean]> },
@@ -124,6 +175,25 @@ function rangePickerProps<DateType>() {
124175
};
125176
}
126177

178+
export interface RangePickerProps<DateType> {
179+
allowEmpty?: [boolean, boolean];
180+
dateRender?: RangeDateRender<DateType>;
181+
defaultPickerValue?: [DateType, DateType] | [string, string];
182+
defaultValue?: [DateType, DateType] | [string, string];
183+
value?: [DateType, DateType];
184+
disabledTime?: (date: EventValue<DateType>, type: RangeType) => DisabledTimes;
185+
disabled?: [boolean, boolean];
186+
format?: string;
187+
renderExtraFooter?: () => VueNode;
188+
separator?: string;
189+
ranges?: Record<
190+
string,
191+
Exclude<RangeValue<DateType>, null> | (() => Exclude<RangeValue<DateType>, null>)
192+
>;
193+
placeholder?: [string, string];
194+
mode?: [PanelMode, PanelMode];
195+
}
196+
127197
export type ExtraDatePickerProps<DateType> = {
128198
valueFormat?: string;
129199
defaultPickerValue?: DateType | string;

0 commit comments

Comments
 (0)