typescript - VueConstructor-typ saknas i Vue3 kompatibilitetsbygg?


Vi är i processen att migrera en Vue 2-app med TypeScript till Vue 3. Eftersom den appen är ganska stor behöver vi använda @vue/compat för att kunna migrera vår app steg för steg.

Men när vi noggrant försöker följa den officiella migrationsguiden stöter vi på problem kring användningen av typen VueConstructor:

 error  in src/presentation/App.vue:43:25

TS2614: Module '"vue"' has no exported member 'VueConstructor'. Did you mean to use 'import VueConstructor from "vue"' instead?
    41 |
    42 | <script lang="ts">
  > 43 | import Vue, { PropType, VueConstructor } from 'vue';
       |                         ^^^^^^^^^^^^^^
    44 | import { EventEmitter } from 'events';
    45 | import WarningAnonymousEdit from '@/presentation/components/WarningAnonymousEdit.vue';
    46 | import Events from '@/events';

Det används på följande sätt i en Vue2-app:

export default ( Vue as VueConstructor<Vue & InstanceType<typeof StateMixin>> ).extend( {
    mixins: [ StateMixin ],
    name: 'App',
    computed: {
        isSaving(): boolean {
            // methods on ExampleMixin are now known to TypeScript as existing on `this`
            return this.isMethodOnMixin();
        },
    },
    // [...]
} );

Koden ovan fungerar utmärkt med Vue 2 och låter TypeScript veta att metoderna på StateMixin också är tillgängliga på klassen.

Några förslag på hur man får det att fungera med Vue3-migrationsbygget?

PS: Ärende #4330 är relaterat men inte riktigt hjälpsamt

PPS: Denna fråga brukade också handla om att PropType inte exporteras av 'vue', men det löstes genom att uppgradera till TypeScript 4.

Relaterade artiklar