@gez/date-time-kit
Version:
76 lines (75 loc) • 3.43 kB
TypeScript
/**
* 字符串类型的别名,防止和其他字面量类型联合时被过度简化。
* 例如:避免 `'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 };