Vue и Nuxt

У Vue-ref’а нет аннотации на переменной — тип живёт в дженерике (ref<User>()), который обычный скан границ пропустил бы. Поэтому t12n детектит Vue-реактивность напрямую:

const user = ref<User>()

// валидируется автоматически — схема из элемента ref'а
user.value = await fetch('/api/me').then(r => r.json())

// инициализатор тоже валидируется
const state = reactive<User>(payload)

Покрыты инициализаторы ref, shallowRef, reactive и shallowReactive, а также любое присваивание someRef.value = …. Детект по типу: срабатывает только если цель действительно Vue-ref, так что обычный .value вроде input.value = … у DOM никогда не трогается.

Работает и в .ts / .tsx (composables, stores, API-слой), и в .vue SFC: плагин инструментирует блок <script setup> (или обычный <script lang="ts">).

Не используете Vue? Уберите 'vue' из опции boundaries — и сканирование полностью отключится:

// vite.config.ts
t12n({
  mode: 'auto',
  boundaries: ['fetch', 'storage', 'json-parse', 'message-event', 'as-any', 'as-unknown'],
})