typescript - Cum pot să export un tip dintr-un component Vue 3 cu fișier unic?


Am un tip definit într-un singur component de fișier pe care aș dori să-l folosesc într-un alt component. Totuși, când import acel tip acolo, Typescript susține că tipul nu este exportat și ESLint îl tratează ca any. Astfel, reguli ca @typescript-eslint/no-unsafe-assignment sunt declanșate. O soluție pe care am găsit-o este crearea unui fișier de definiție .d.ts cu același nume de bază ca componenta, dar aș dori ca componentele mele să rămână într-un singur fișier.

Exemplu minim (ne)funcțional:

ExportingComponent.vue

<template>
  <div />
</template>

<script lang="ts">
import { defineComponent } from 'vue'

export type foo = { bar: () => void }

export default defineComponent({
  name: 'ExportingComponent'
})
</script>

<style></style>

ImportingComponent.vue

<template>
  <div />
</template>

<script lang="ts">
import { defineComponent } from 'vue'
import { foo } from './ExportingComponent'

export default defineComponent({
  name: 'ImportingComponent',

  setup () {
    // next line triggers @typescript-eslint/no-unsafe-assignment
    const fooFoo = {} as Partial<foo>

    /* do something with fooFoo... */
 
    return {}
  }
})
</script>

<style>
</style>

Răspuns #1

O altă modalitate de a gestiona acest lucru este folosind <script setup>, care vă permite, de asemenea, să utilizați un tag de script „normal” în același component.

<!-- ExportingComponent.vue -->
<template>
  <div />
</template>

<script lang="ts">
export type foo = { bar: () => void }
</script>

<script setup lang="ts">
import { ref } from 'vue'

const someVar = ref(1)
</script>

<style></style>