AlpineJS

pnpm add @types/alpinejs -D
cat > global.d.ts << EOF
/// <reference types="vite/client" />

import type { Axios } from 'axios'
import type { Alpine } from 'alpinejs'

declare global {
  interface Window {
    axios: Axios
    Alpine: Alpine
  }
}

window.axios = window.axios || {}
window.Alpine = window.Alpine || {}

export {}
EOF

In resources/js/app.ts:

resources/js/app.ts
import './bootstrap'
import type { Alpine as AlpineTS } from 'alpinejs'
import { Alpine, Livewire } from '../../vendor/livewire/livewire/dist/livewire.esm'

import dataModule from './modules/data-module'
import storeModule from './modules/store-module'

const alpineTs: AlpineTS = Alpine
alpineTs.data('dataModule', dataModule)
alpineTs.store('storeModule', storeModule)

Livewire.start()

AlpineJS data and store

resources/js/data-module.ts
import type { AlpineComponent } from 'alpinejs'

function dataModule(): AlpineComponent<{
  anyVariable: boolean
  anyMethod(url: string | undefined): Promise<boolean>
}> {
  return {
    anyVariable: false,
    async anyMethod(src?: string): Promise<boolean> {
      // ...
    },
  }
}

export default dataModule
resources/js/store-module.ts
const sidebar = {
  anyVariable: false,
  anyMethod() {
    // ...
  },
}

export default storeModule