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 WeekPickerProps = Omit<PickerDateProps<Date>, 'picker'> & ExtraDatePickerProps<Date>;
export type RangePickerProps = BaseRangePickerProps<Date> & ExtraRangePickerProps<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; DatePicker.WeekPicker = WeekPicker;
const MonthPicker = DatePicker.MonthPicker; DatePicker.MonthPicker = MonthPicker;
const WeekPicker = DatePicker.WeekPicker; DatePicker.YearPicker = YearPicker;
const QuarterPicker = DatePicker.QuarterPicker; DatePicker.RangePicker = RangePicker;
DatePicker.TimePicker = TimePicker;
DatePicker.QuarterPicker = QuarterPicker;
/* istanbul ignore next */ /* istanbul ignore next */
DatePicker.install = function (app: App) { 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 WeekPickerProps = Omit<PickerDateProps<Dayjs>, 'picker'> & ExtraDatePickerProps<Dayjs>;
export type RangePickerProps = BaseRangePickerProps<Dayjs> & ExtraRangePickerProps<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; DatePicker.WeekPicker = WeekPicker;
const MonthPicker = DatePicker.MonthPicker; DatePicker.MonthPicker = MonthPicker;
const WeekPicker = DatePicker.WeekPicker; DatePicker.YearPicker = YearPicker;
const QuarterPicker = DatePicker.QuarterPicker; DatePicker.RangePicker = RangePicker;
DatePicker.TimePicker = TimePicker;
DatePicker.QuarterPicker = QuarterPicker;
/* istanbul ignore next */ /* istanbul ignore next */
DatePicker.install = function (app: App) { DatePicker.install = function (app: App) {

View File

@ -17,7 +17,7 @@ import type { ExtraDatePickerProps } from './props';
import { commonProps, datePickerProps } from './props'; import { commonProps, datePickerProps } from './props';
import devWarning from '../../vc-util/devWarning'; import devWarning from '../../vc-util/devWarning';
export default function generatePicker<DateType>( export default function generateSinglePicker<DateType>(
generateConfig: GenerateConfig<DateType>, generateConfig: GenerateConfig<DateType>,
extraProps: Record<string, any> = {}, extraProps: Record<string, any> = {},
) { ) {
@ -238,5 +238,19 @@ export default function generatePicker<DateType>(
'AQuarterPicker', '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 generateSinglePicker from './generateSinglePicker';
import generateRangePicker from './generateRangePicker'; import generateRangePicker from './generateRangePicker';
import type { SizeType } from '../../config-provider'; import type { SizeType } from '../../config-provider';
import type { ExtraDatePickerProps, ExtraRangePickerProps } from './props';
import type { DefineComponent } from 'vue';
export const Components = { button: PickerButton, rangeItem: PickerTag }; export const Components = { button: PickerButton, rangeItem: PickerTag };
@ -129,32 +131,33 @@ function generatePicker<DateType>(
generateConfig: GenerateConfig<DateType>, generateConfig: GenerateConfig<DateType>,
extraProps: Record<string, any> = {}, extraProps: Record<string, any> = {},
) { ) {
type DatePickerProps = PickerProps<DateType> & ExtraDatePickerProps<DateType>;
// =========================== Picker =========================== // =========================== Picker ===========================
const { DatePicker, WeekPicker, MonthPicker, YearPicker, TimePicker, QuarterPicker } = const { DatePicker, WeekPicker, MonthPicker, YearPicker, TimePicker, QuarterPicker } =
generateSinglePicker(generateConfig, extraProps); generateSinglePicker<DateType>(generateConfig, extraProps);
// ======================== Range Picker ======================== // ======================== Range Picker ========================
const RangePicker = generateRangePicker(generateConfig, extraProps); const RangePicker = generateRangePicker<DateType>(generateConfig, extraProps);
// =========================== Export =========================== // 使 as TS7056
type MergedDatePickerType = typeof DatePicker & { // error TS7056: The inferred type of this node exceeds the maximum length the compiler will serialize. An explicit type annotation is needed.
WeekPicker: typeof WeekPicker; return {
MonthPicker: typeof MonthPicker; DatePicker,
YearPicker: typeof YearPicker; WeekPicker,
RangePicker: typeof RangePicker; MonthPicker,
TimePicker: typeof TimePicker; YearPicker,
QuarterPicker: typeof QuarterPicker; 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; export default generatePicker;

View File

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