Day.js распространяется с встроенной поддержкой TypeScript, поэтому
отдельные типы из @types не требуются. Базовая установка
выполняется стандартным способом через пакетный менеджер:
npm install dayjs
или
yarn add dayjs
Дополнительные плагины устанавливаются отдельно и подключаются по мере необходимости:
npm install dayjs-plugin-utc
npm install dayjs-plugin-relativeTime
Библиотека включает собственные TypeScript-описания, которые поставляются вместе с основным пакетом. Это обеспечивает:
DayjsОсновной тип времени представлен интерфейсом Dayjs,
который используется во всех операциях:
import dayjs, { Dayjs } from "dayjs";
const date: Dayjs = dayjs();
Каждый вызов dayjs() возвращает объект этого типа,
обеспечивая согласованность API.
Корректная работа Day.js в TypeScript зависит от настроек
компилятора. Основные параметры tsconfig.json:
{
"compilerOptions": {
"target": "ES2019",
"module": "ESNext",
"moduleResolution": "Node",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true
}
}
Ключевые моменты:
esModuleInterop обеспечивает корректный импорт
CommonJS-модулейstrict активирует строгую типизацию, важную для цепочек
Day.jsskipLibCheck снижает вероятность конфликтов с типами
зависимостейПоддерживаются два основных стиля импорта:
import dayjs from "dayjs";
и альтернативный вариант для проектов с настройками CommonJS:
const dayjs = require("dayjs");
В типизированной среде предпочтение отдаётся ES-модулям, так как они обеспечивают более точную работу автодополнения и tree-shaking.
Основной тип Dayjs описывает неизменяемый объект даты.
Любая операция возвращает новый экземпляр, сохраняя тип:
import dayjs, { Dayjs } from "dayjs";
const start: Dayjs = dayjs("2026-01-01");
const end: Dayjs = start.add(7, "day");
Типизация методов гарантирует:
day,
month, year и т.д.)Пример работы с форматированием:
const formatted: string = dayjs().format("YYYY-MM-DD");
Метод format всегда возвращает строку, что фиксируется
типами.
Day.js использует систему плагинов, которая влияет на API объекта
Dayjs. После подключения плагина типы должны быть расширены
вручную или через встроенные декларации.
Пример подключения плагина:
import dayjs from "dayjs";
import utc from "dayjs/plugin/utc";
dayjs.extend(utc);
После подключения добавляются новые методы:
const d = dayjs().utc();
При использовании TypeScript расширение интерфейса Dayjs
выполняется через module augmentation.
import "dayjs";
declare module "dayjs" {
interface Dayjs {
customMethod(): string;
}
}
Реализация метода:
import dayjs from "dayjs";
(dayjs.prototype as any).customMethod = function () {
return "value";
};
После расширения метод становится доступен в типизированной среде:
const result = dayjs().customMethod();
При работе с кастомными форматами часто используется строгая типизация строковых литералов:
type DateFormat = "YYYY-MM-DD" | "DD.MM.YYYY";
function formatDate(date: Dayjs, format: DateFormat): string {
return date.format(format);
}
Это ограничивает набор допустимых форматов и снижает вероятность ошибок.
Некоторые плагины добавляют дополнительные параметры к функциям
dayjs. В TypeScript это учитывается через расширение типов
функций и интерфейсов.
Пример с относительным временем:
import dayjs from "dayjs";
import relativeTime from "dayjs/plugin/relativeTime";
dayjs.extend(relativeTime);
const value: string = dayjs().from(dayjs("2020-01-01"));
Тип возвращаемого значения фиксирован как string, что
отражает поведение API.
Day.js возвращает специальный объект для некорректных дат. В TypeScript это учитывается через дополнительные проверки:
const date = dayjs("invalid");
const isValid: boolean = date.isValid();
Метод isValid используется как основной механизм
проверки корректности даты перед дальнейшими операциями.
В режиме strict поведение Day.js остаётся предсказуемым
благодаря явной типизации:
anyDayjsПример безопасной цепочки:
const result: string = dayjs()
.add(2, "day")
.set("month", 5)
.format("YYYY-MM-DD");
Каждый этап сохраняет корректную типизацию до финального преобразования в строку.