Тип VueConstructor отсутствует в совместимой сборке Vue3?

#typescript #vue.js #vuejs2 #migration #vuejs3

#typescript #vue.js #vuejs2 #миграция #vuejs3

Вопрос:

Мы находимся в процессе переноса приложения Vue 2 с TypeScript на Vue 3. Поскольку это приложение довольно большое, нам нужно использовать @vue/compat , чтобы иметь возможность переносить наше приложение по одному шагу за раз.

Однако при тщательном следовании официальному руководству по миграции мы сталкиваемся с проблемами при использовании типа 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';
 

В приложении Vue2 он используется следующим образом:

 export default ( Vue as VueConstructor<Vue amp; 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();
        },
    },
    // [...]
} );
 

Приведенный выше код отлично работает с Vue 2 и позволяет TypeScript знать, что методы on StateMixin также доступны в классе.

Любые предложения о том, как заставить его работать с сборкой миграции Vue3?

PS: Проблема # 4330 связана, но не очень полезна

PPS: В этом вопросе также задавался вопрос о PropType том, что он не экспортируется 'vue' , но это было решено путем обновления до TypeScript 4.