vue.js - Vue 2/Typescript, πώς να κάνετε τύπο σε ένα prop inline;
Έχω ένα έργο Vue 2 NuxtJS ρυθμισμένο με Typescript και θα ήθελα να επωφεληθώ από τη λέξη-κλειδί unknown στο Typescript.
Στο συστατικό μου, λαμβάνω ένα prop που δηλώνεται ως εξής
props: {
items: {
type: Array as () => LabelValuePair[],
required: true,
},
},
LabelValuePair δηλώνεται εδώ
interface LabelValuePair {
label: string;
value: unknown;
}
Και μέσα στο πρότυπό μου, θα ήθελα να χρησιμοποιήσω κάτι σαν αυτό
<li v-for="item in items" :key="item.value as string">
<span>
{{ item.label }}: <strong>{{ item.value }}</strong>
</span>
</li>
Το θέμα είναι ότι, όπως και ο τριμερής τελεστής, η λέξη-κλειδί as στο Typescript δεν αναγνωρίζεται ως έγκυρη σύνταξη από τον μεταγλωττιστή του Vue.
Υπάρχει κάποια λύση ή έστω κάποια παράκαμψη για να αποφύγουμε να κάνουμε κάτι ανόητο όπως το παρακάτω;
setup(props) {
const castItems = props.items.map((item) => ({
...item,
value: item.value as string,
}));
return { castItems };
},
Απάντηση #1
Αν το LabelValuePair προορίζεται για επαναχρησιμοποίηση και αναμένεται να έχει τιμή string σε μια ιδιότητα, αυτή είναι η περίπτωση για γενικό τύπο:
interface LabelValuePair<T = unknown> {
label: string;
value: T;
}
και
items: {
type: Array as PropType<LabelValuePair<string>[]>,
required: true,
},
