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.