טייפסקריפט - איך אני יכול לטפל נכון ב-Vue slots ב-Storybook
אני מנסה להפעיל את חריצי Vue ב-Storybook. כרגע אני בגרסת הבטא של Storybook v7, בגלל שהיו שינויים שעשו אותו טוב יותר עבור הפרויקט שלנו. אנחנו משתמשים ב-Vue 3 עם vite. אנחנו גם משתמשים ב-Typescript בכל מקום.
הבעיה היא שסטוריבוק לא נראה כאילו הוא נותן דרך קלה להוסיף תוכן לסלוט. הדרך היחידה היא דרך אובייקט ה-args, וגם אז אתה צריך משהו כזה כדי שזה יעבוד נכון:
const meta: Meta<typeof Modal> = {
title: 'Componenten/Modal',
component: Modal,
render: (args: any) => ({
components: { Modal },
setup() {
return { args };
},
template:
'<Modal v-bind="args">' +
'<template v-if="args.data" v-slot:data>' +
'<div v-html="args.data" />' +
'</template>' +
'</Modal>',
}),
};
export default meta;
type Story = StoryObj<typeof Modal>;
export const Modal: Story = {
args: {
title: 'Are you sure?',
show: true,
actions: [
{
buttonType: ButtonType.Remove,
label: 'Yes, remove',
link: () => {},
},
{
label: 'Cancel',
link: () => {},
},
],
data: "<a href={'/test'}>Hello world</a>",
},
};
אני באמת חושב שזה מכוער ושצריך להיות אפשרות קלה יותר, אבל אני לא בטוח שיש אלטרנטיבה?
כמו כן, שמות הסלוטים אינם נמצאים בסוגי אובייקט ה-args, לכן עם קוד זה, TypeScript נותן שגיאת TS2322 שהשם של הסלוט אינו מאפיין של args. זה יכול לעבוד על ידי שימוש ב-any, אבל זה משהו שהייתי מעדיף לא לעשות.
מישהו יודע פתרון טוב יותר לזה?