#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.