Как я могу определить испускание с типом возврата, отличным от void в Vue 3.3+? (Машинопись)

Начиная с Vue 3.3 можно определить выбросы в TypeScript следующим образом:

<script setup lang = "ts">
const emit = defineEmits<{
  change: [id: number]
  update: [value: string]
}>()
</script>

Как я могу это сделать, если мне нужен тип возвращаемого значения, отличный от void, например String?

Разве не так? vuejs.org/api/…

kissu 27.06.2024 12:08

@kissu та же ссылка, которую я видел, она не отвечает на мой вопрос.

PyKKe 27.06.2024 12:11

это бесполезно, из испускаемых значений нет возвращаемого значения

Alexander Nenashev 27.06.2024 12:34

@AlexanderNenachev, если это правильный ответ, не стесняйтесь отвечать на этот вопрос. Просто расширьте это немного больше, спасибо.

PyKKe 27.06.2024 14:27
Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Мне нравится библиотека Mantine Component , но заставить ее работать без проблем с Remix бывает непросто.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
TypeScript против JavaScript
TypeScript против JavaScript
TypeScript vs JavaScript - в чем различия и какой из них выбрать?
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Не все нужно хранить на стороне сервера. Иногда все, что вам нужно, это постоянное хранилище на стороне клиента для хранения уникальных для клиента...
Что такое ленивая загрузка в Angular и как ее применять
Что такое ленивая загрузка в Angular и как ее применять
Ленивая загрузка - это техника, используемая в Angular для повышения производительности приложения путем загрузки модулей только тогда, когда они...
1
4
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

К сожалению, в ядре шаблон эмиттера событий не возвращает никакого возвращаемого значения.

Но учитывая, что все обработчики событий связаны со свойствами onXXX, вы можете ввести значения, возвращаемые событием. Хотя здесь не используется механизм emit и из-за этого могут быть некоторые недостатки, о которых я не знаю в контексте вашего варианта использования.

Также обратите внимание, что мы теряем ввод атрибутов App.vue из-за резервных атрибутов.

Смотрите на Vue SFC Playground

<script setup lang = "ts">
import Wrapper from './Wrapper.vue';
</script>

<template>
  <wrapper @event = "() => 'app handled'"/>
</template>

Обертка.vue

<script setup lang = "ts">
import Comp from './Comp.vue';

</script>

<template>
  <comp @event = "() => 'wrapper handled'"/>
</template>

Комп.vue:

<script setup lang = "ts">

const props = defineProps<{
  onEvent: (() => string) | Array<() => string>,
}>();

function onClick(){
  const handlers = Array.isArray(props.onEvent) ? props.onEvent : [props.onEvent];
  for(const fn of handlers){
    alert(fn());
  }
}

</script>
<template>
  <button @click = "onClick">Click</button>
</template>

Другие вопросы по теме