Skip to content

refactor(DateTimePicker): убрать as any касты вокруг @internationalized/date #56

Description

@IgorShevchik

Контекст

В src/runtime/components/DateTimePicker.vue пришлось добавить ~8 приведений as unknown as DateValue / as any из-за конфликта структурных типов между runtime-классами CalendarDate / CalendarDateTime / ZonedDateTime и type alias DateValue из @internationalized/date. У ZonedDateTime есть #private-поле, из-за чего TS не может корректно сузить union на остальные классы — vue-tsc падает на тривиальных присваиваниях.

См. PR #55 — обсуждение в коммите 31d331b.

Что нужно сделать

  1. Завести локальный union в src/runtime/types/ или в утилитарном файле:

    export type LocalDateValue = CalendarDate | CalendarDateTime | ZonedDateTime

    и работать с ним во внутренних helper-функциях (withTime, toCalendarDate, toJsDate, presetHint, resolvePreset, isPresetActive*). Приведение к публичному DateValue — только в emit.

  2. Проверить, не страдают ли тем же Calendar.vue и InputDate.vue — судя по similar diff-патернам, источник проблемы один.

  3. Возможно, поднять issue в reka-ui или @internationalized/date на тему совместимости private-полей с union narrowing.

Definition of Done

  • В DateTimePicker.vue нет ни одного as any / as unknown as DateValue
  • vue-tsc остаётся зелёным
  • Снапшоты компонента не меняются (только типы)

Приоритет: P1 — технический долг, не блокер.


Следствие ревью PR #55.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions