#javascript #typescript #vue.js #vuejs3
Вопрос:
Я создал приложение Vue 3, используя TypeScript. Внутри папки src я создал новый цвет перечисления.ts
enum Color {
Red,
Blue
}
export default Color;
Я создал компонент ColorDisplay.vue
<template>
<div>
{{ color }}
</div>
</template>
<script lang="ts">
import { defineComponent } from "vue";
import Color from "../color";
export default defineComponent({
props: {
color: {
type: Color,
required: true
}
}
});
</script>
и изменил файл Home.vue на
<template>
<div>
<color-display :color="Color.Red" />
<color-display :color="Color.Blue" />
</div>
</template>
<script lang="ts">
import { defineComponent } from "vue";
import ColorDisplay from "../components/ColorDisplay.vue";
import Color from "../color";
export default defineComponent({
components: {
'color-display': ColorDisplay,
}
});
</script>
К сожалению, возникает несколько проблем:
- В Home.vue импортированный
Color
файл не используется, хотя я пытаюсь использовать его в шаблоне - В ColorDisplay.vue перечисление кажется недопустимым типом реквизита
Не мог бы кто-нибудь рассказать мне, как создать перечисление, ожидать его как свойство компонента и передать его компонентам?
Комментарии:
1. пожалуйста, приведите минимальный воспроизводимый пример в любом коде и коробке
Ответ №1:
type
Значение реквизита компонента ограничено встроенными конструкторами и пользовательскими классами. Перечисления TS являются не классами, а объектами с определенными типами и не могут использоваться как есть type
.
Скорее всего, так и должно быть:
color: {
type: Number as PropType<Color>,
required: true
}
Комментарии:
1. и как я должен использовать его внутри файла Home.vue? Чтобы выдать это за реквизит?
2. Вам нужно предоставить его шаблону в функции настройки,
return { Color }
.
Ответ №2:
Попробуйте аннотировать свойства с помощью propType. Объект как propType
Вот документация VueJS 3 для аннотирования свойств: https://v3.vuejs.org/guide/typescript-support.html#annotating-return-types