UNPKG

@gez/date-time-kit

Version:

76 lines (75 loc) 3.43 kB
/** * 字符串类型的别名,防止和其他字面量类型联合时被过度简化。 * 例如:避免 `'utf-8' | string` 被化简成 `string` */ export type Str = string & Record<never, never>; declare abstract class Granularity<T extends string = string> { abstract readonly list: readonly T[]; abstract readonly map: Readonly<Map<T, number>>; readonly has: (v: string) => v is T; readonly idx: { (v: T): number; (...v: T[]): number[]; }; private readonly _fromIdx; readonly fromIdx: { (idx: number): T; (...indexes: number[]): T[]; }; readonly cp: (a: T, b: T) => number; readonly lt: (a: T, b: T) => boolean; readonly lte: (a: T, b: T) => boolean; readonly gt: (a: T, b: T) => boolean; readonly gte: (a: T, b: T) => boolean; readonly minmax: (v1: T, v2: T) => [T, T]; readonly minmaxIdx: (v1: T, v2: T) => [number, number]; readonly min: (...args: T[]) => T; readonly max: (...args: T[]) => T; readonly clamp: (min: T, val: T | Str, max: T, rule?: "min" | "max") => T; } declare class _DateGranularity extends Granularity<'year' | 'month' | 'day'> { readonly year = "year"; readonly month = "month"; readonly day = "day"; readonly list: readonly ["day", "month", "year"]; readonly map: Map<"month" | "year" | "day", number>; } type DateGran = _DateGranularity['list'][number]; export declare const dateGranHelper: _DateGranularity; declare class _TimeGranularity extends Granularity<'hour' | 'minute' | 'second' | 'millisecond'> { readonly hour = "hour"; readonly minute = "minute"; readonly second = "second"; readonly millisecond = "millisecond"; readonly list: readonly ["millisecond", "second", "minute", "hour"]; readonly map: Map<"hour" | "minute" | "second" | "millisecond", number>; } type TimeGran = _TimeGranularity['list'][number]; export declare const timeGranHelper: _TimeGranularity; declare class _DateTimeGranularity extends Granularity<DateGran | TimeGran> { readonly year = "year"; readonly month = "month"; readonly day = "day"; readonly hour = "hour"; readonly minute = "minute"; readonly second = "second"; readonly millisecond = "millisecond"; readonly list: readonly ["millisecond", "second", "minute", "hour", "day", "month", "year"]; readonly map: Map<"month" | "year" | "day" | "hour" | "minute" | "second" | "millisecond", number>; readonly toTimeGran: (gran: DateGran | TimeGran) => TimeGran; readonly toDateGran: (gran: DateGran | TimeGran) => DateGran; readonly isTimeGran: (gran: DateGran | TimeGran | Str) => gran is TimeGran; readonly isDateGran: (gran: DateGran | TimeGran | Str) => gran is DateGran; } type DateTimeGran = _DateTimeGranularity['list'][number]; export declare const dateTimeGranHelper: _DateTimeGranularity; export declare const granHelper: { readonly date: _DateGranularity; readonly time: _TimeGranularity; readonly dateTime: _DateTimeGranularity; readonly toDateGran: (gran: DateGran | TimeGran) => DateGran; readonly toTimeGran: (gran: DateGran | TimeGran) => TimeGran; readonly isTimeGran: (gran: DateGran | TimeGran | Str) => gran is TimeGran; readonly isDateGran: (gran: DateGran | TimeGran | Str) => gran is DateGran; }; export type { DateGran as DateGranularity, TimeGran as TimeGranularity, DateTimeGran as DateTimeGranularity };