perf: ts type perf

pull/4499/head
tangjinzhou 2021-08-09 17:03:36 +08:00
parent f4140b9c63
commit 99ac4780d6
5 changed files with 63 additions and 37 deletions

View File

@ -13,12 +13,15 @@ export type MonthPickerProps = Omit<PickerDateProps<Date>, 'picker'> & ExtraDate
export type WeekPickerProps = Omit<PickerDateProps<Date>, 'picker'> & ExtraDatePickerProps<Date>;
export type RangePickerProps = BaseRangePickerProps<Date> & ExtraRangePickerProps<Date>;
const DatePicker = generatePicker<Date>(dataFnsGenerateConfig);
const { DatePicker, WeekPicker, MonthPicker, YearPicker, TimePicker, QuarterPicker, RangePicker } =
generatePicker<Date>(dataFnsGenerateConfig);
const RangePicker = DatePicker.RangePicker;
const MonthPicker = DatePicker.MonthPicker;
const WeekPicker = DatePicker.WeekPicker;
const QuarterPicker = DatePicker.QuarterPicker;
DatePicker.WeekPicker = WeekPicker;
DatePicker.MonthPicker = MonthPicker;
DatePicker.YearPicker = YearPicker;
DatePicker.RangePicker = RangePicker;
DatePicker.TimePicker = TimePicker;
DatePicker.QuarterPicker = QuarterPicker;
/* istanbul ignore next */
DatePicker.install = function (app: App) {

View File

@ -14,12 +14,15 @@ export type MonthPickerProps = Omit<PickerDateProps<Dayjs>, 'picker'> & ExtraDat
export type WeekPickerProps = Omit<PickerDateProps<Dayjs>, 'picker'> & ExtraDatePickerProps<Dayjs>;
export type RangePickerProps = BaseRangePickerProps<Dayjs> & ExtraRangePickerProps<Dayjs>;
const DatePicker = generatePicker<Dayjs>(dayjsGenerateConfig);
const { DatePicker, WeekPicker, MonthPicker, YearPicker, TimePicker, QuarterPicker, RangePicker } =
generatePicker<Dayjs>(dayjsGenerateConfig);
const RangePicker = DatePicker.RangePicker;
const MonthPicker = DatePicker.MonthPicker;
const WeekPicker = DatePicker.WeekPicker;
const QuarterPicker = DatePicker.QuarterPicker;
DatePicker.WeekPicker = WeekPicker;
DatePicker.MonthPicker = MonthPicker;
DatePicker.YearPicker = YearPicker;
DatePicker.RangePicker = RangePicker;
DatePicker.TimePicker = TimePicker;
DatePicker.QuarterPicker = QuarterPicker;
/* istanbul ignore next */
DatePicker.install = function (app: App) {

View File

@ -17,7 +17,7 @@ import type { ExtraDatePickerProps } from './props';
import { commonProps, datePickerProps } from './props';
import devWarning from '../../vc-util/devWarning';
export default function generatePicker<DateType>(
export default function generateSinglePicker<DateType>(
generateConfig: GenerateConfig<DateType>,
extraProps: Record<string, any> = {},
) {
@ -238,5 +238,19 @@ export default function generatePicker<DateType>(
'AQuarterPicker',
);
return { DatePicker, WeekPicker, MonthPicker, YearPicker, TimePicker, QuarterPicker };
return {
DatePicker,
WeekPicker,
MonthPicker,
YearPicker,
TimePicker,
QuarterPicker,
} as unknown as {
DatePicker: DefineComponent<DatePickerProps>;
WeekPicker: DefineComponent<Omit<PickerDateProps<DateType>, 'picker'>>;
MonthPicker: DefineComponent<Omit<PickerDateProps<DateType>, 'picker'>>;
YearPicker: DefineComponent<Omit<PickerDateProps<DateType>, 'picker'>>;
TimePicker: DefineComponent<Omit<PickerTimeProps<DateType>, 'picker'>>;
QuarterPicker: DefineComponent<Omit<PickerTimeProps<DateType>, 'picker'>>;
};
}

View File

@ -17,6 +17,8 @@ import type { TimePickerLocale } from '../../time-picker';
import generateSinglePicker from './generateSinglePicker';
import generateRangePicker from './generateRangePicker';
import type { SizeType } from '../../config-provider';
import type { ExtraDatePickerProps, ExtraRangePickerProps } from './props';
import type { DefineComponent } from 'vue';
export const Components = { button: PickerButton, rangeItem: PickerTag };
@ -129,32 +131,33 @@ function generatePicker<DateType>(
generateConfig: GenerateConfig<DateType>,
extraProps: Record<string, any> = {},
) {
type DatePickerProps = PickerProps<DateType> & ExtraDatePickerProps<DateType>;
// =========================== Picker ===========================
const { DatePicker, WeekPicker, MonthPicker, YearPicker, TimePicker, QuarterPicker } =
generateSinglePicker(generateConfig, extraProps);
generateSinglePicker<DateType>(generateConfig, extraProps);
// ======================== Range Picker ========================
const RangePicker = generateRangePicker(generateConfig, extraProps);
const RangePicker = generateRangePicker<DateType>(generateConfig, extraProps);
// =========================== Export ===========================
type MergedDatePickerType = typeof DatePicker & {
WeekPicker: typeof WeekPicker;
MonthPicker: typeof MonthPicker;
YearPicker: typeof YearPicker;
RangePicker: typeof RangePicker;
TimePicker: typeof TimePicker;
QuarterPicker: typeof QuarterPicker;
// 使 as TS7056
// error TS7056: The inferred type of this node exceeds the maximum length the compiler will serialize. An explicit type annotation is needed.
return {
DatePicker,
WeekPicker,
MonthPicker,
YearPicker,
TimePicker,
QuarterPicker,
RangePicker,
} as unknown as {
DatePicker: DefineComponent<DatePickerProps>;
WeekPicker: DefineComponent<Omit<PickerDateProps<DateType>, 'picker'>>;
MonthPicker: DefineComponent<Omit<PickerDateProps<DateType>, 'picker'>>;
YearPicker: DefineComponent<Omit<PickerDateProps<DateType>, 'picker'>>;
TimePicker: DefineComponent<Omit<PickerTimeProps<DateType>, 'picker'>>;
QuarterPicker: DefineComponent<Omit<PickerTimeProps<DateType>, 'picker'>>;
RangePicker: DefineComponent<RangePickerProps<DateType> & ExtraRangePickerProps<DateType>>;
};
const MergedDatePicker = DatePicker as MergedDatePickerType;
MergedDatePicker.WeekPicker = WeekPicker;
MergedDatePicker.MonthPicker = MonthPicker;
MergedDatePicker.YearPicker = YearPicker;
MergedDatePicker.RangePicker = RangePicker;
MergedDatePicker.TimePicker = TimePicker;
MergedDatePicker.QuarterPicker = QuarterPicker;
return MergedDatePicker;
}
export default generatePicker;

View File

@ -16,12 +16,15 @@ export type WeekPickerProps = Omit<PickerDateProps<Moment>, 'picker'> &
ExtraDatePickerProps<Moment>;
export type RangePickerProps = BaseRangePickerProps<Moment> & ExtraRangePickerProps<Moment>;
const DatePicker = generatePicker<Moment>(momentGenerateConfig);
const { DatePicker, WeekPicker, MonthPicker, YearPicker, TimePicker, QuarterPicker, RangePicker } =
generatePicker<Moment>(momentGenerateConfig);
const RangePicker = DatePicker.RangePicker;
const MonthPicker = DatePicker.MonthPicker;
const WeekPicker = DatePicker.WeekPicker;
const QuarterPicker = DatePicker.QuarterPicker;
DatePicker.WeekPicker = WeekPicker;
DatePicker.MonthPicker = MonthPicker;
DatePicker.YearPicker = YearPicker;
DatePicker.RangePicker = RangePicker;
DatePicker.TimePicker = TimePicker;
DatePicker.QuarterPicker = QuarterPicker;
/* istanbul ignore next */
DatePicker.install = function (app: App) {