You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在SvelteKit中结合Storybook使用TypeScript遇类型错误求助

解决SvelteKit+TypeScript+Storybook中args类型报错问题

方案1:使用Storybook官方类型(推荐)

从@storybook/svelte导入官方提供的类型,给配置和故事变量做类型约束,同时可以结合组件Props类型实现类型校验:

import type { Meta, StoryObj } from '@storybook/svelte';
import Modal from './Modal.svelte';

// 定义Modal组件的Props类型,也可以直接从组件文件中导出复用
type ModalProps = {
  text: string;
};

const meta: Meta<ModalProps> = {
  title: 'Modal',
  component: Modal,
};

export default meta;

type Story = StoryObj<ModalProps>;

export const Primary: Story = {
  args: {
    text: 'Hello World',
  },
};

方案2:类型断言快速修复

如果不想改动原有代码结构,直接给Primary做类型断言,告诉TypeScript它包含args属性:

import Modal from './Modal.svelte';

export default {
  title: 'Modal',
  component: Modal,
};

const Template = (args: any) => ({
  component: Modal,
  props: args,
});

// 断言类型,允许挂载args属性
export const Primary = Template.bind({}) as typeof Template & { args?: any };
Primary.args = {
  text: 'Hello World',
};

方案3:复用组件自身导出的Props类型

如果你的Modal.svelte中已经导出了Props类型(比如export type Props = { text: string };),可以直接复用这个类型:

import type { Meta, StoryObj } from '@storybook/svelte';
import Modal, type { Props } from './Modal.svelte';

const meta: Meta<Props> = {
  title: 'Modal',
  component: Modal,
};

export default meta;

type Story = StoryObj<Props>;

export const Primary: Story = {
  args: {
    text: 'Hello World',
  },
};

报错原因说明

Template.bind({})返回的是纯函数类型,TypeScript默认不知道这个函数会被动态挂载args属性,而Storybook的JS写法是通过给函数加属性来传递参数,所以需要明确告知TypeScript该属性的存在,或者用官方类型来约束结构。

内容的提问来源于stack exchange,提问作者davidfrp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 10:33:28