Я собираюсь обновить проект vue 2 до vue 3. В моем проекте vue 2 есть два источника. Я хочу изменить его как vue 3. Я нашел способ использовать эмиссии в vue 3 с помощью машинописного текста. Вот скриптовая часть кода в моем обновленном проекте.
<script lang = "ts">
import { Component, Vue } from 'vue-facing-decorator';
import { DataTableActionTypes } from '@/shared/enums/dataTableActionTypes.enum';
import Modal from '@/shared/components/modal/Modal.vue';
import { defineComponent } from 'vue';
export default defineComponent ({
name : 'AddressListActionButtons',
components: {
Modal
},
props: {
item : {
type : undefined, //since type as any in vue 2 project
},
},
showDeleteAddressConfirmation = false,
methods : {
onDeleteAddressClick() {
this.showDeleteAddressConfirmation = true;
this.onAction(this.item, DataTableActionTypes.ActionButtonSelect);
},
onCloseDelete() {
this.showDeleteAddressConfirmation = false;
this.onAction(this.item, DataTableActionTypes.ResetActionButtton);
},
deleteAddress() {
this.showDeleteAddressConfirmation = false;
this.onDeleteAddress(this.item, DataTableActionTypes.Delete)
}
},
emits : ['customEvent'],
setup(props, { emit }) {
const onAction = (data: any, type: DataTableActionTypes)=>{
}
},
emits : ['customEvent'],
setup(props, { emit }) {
const onDeleteAddress = (id: number, type: DataTableActionTypes)=>{
}
},
})
</script>
Поскольку есть два эмитирования, появляется сообщение об ошибке, которое называется Литерал объекта не может иметь несколько свойств с одинаковым именем.ts(1117). На самом деле эта ошибка возникает из-за того, что я использую два ключевых слова emits. Есть ли решение для решения этой ошибки?





Я бы рекомендовал использовать состав API следующим образом:
<script setup>
import { defineEmits } from "vue";
const emit = defineEmits(["emit1", "emit2"]);
const sendEmit1 = () => {
emit("emit1");
};
const sendEmit2 = () => {
emit("emit2");
};
</script>
<template>
<button @click = "sendEmit1">emit 1</button>
<button @click = "sendEmit2">emit 2</button>
</template>
<script>
export default {
name: "HelloWorld",
};
</script>
Рабочий пример на codeandbox
@KanchanaKariyawasam, вы наверняка можете использовать его с машинописным текстом, как вы можете видеть в документах: https://vuejs.org/guide/components/events.html#declaring-emitted-events
На самом деле я использую машинопись. Из-за этого я не могу использовать <настройка сценария>. Вот почему я использую defineComponent. Как использовать Vue 3 с TypeScript