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

Storybook Template接收的Args参数格式异常问题求助

Storybook 6.5.13 Template接收嵌套args对象的问题解决

问题说明

按照官方示例编写Storybook模板时,Template函数接收的args是包含故事描述的复杂对象,真正需要传递给组件的props嵌套在args.args中,但直接使用args.args会触发TypeScript错误,而其他开发者使用相同范式却能正常工作。使用版本为Storybook 6.5.13,相关代码和配置如下:

组件与故事代码

import { ComponentMeta, ComponentStory } from '@storybook/react';
import React, { FC } from 'react';

interface FooProps {
  myArg: string;
}

const Foo: FC<FooProps> = ({ myArg }) => <p>{myArg}</p>;
Foo.displayName = 'Foo';

export default {
  component: Foo,
  title: 'Foo',
} as ComponentMeta<typeof Foo>;

const Template: ComponentStory<typeof Foo> = (args) => {
  console.log(args);
  return <Foo {...args} />;
};

export const Default = Template.bind({});
Default.args = { myArg: 'Foo' };

Storybook配置

module.exports = {
  stories: [
    './**/*.stories.@(js|jsx|ts|tsx)',
  ],
  addons: [
    {
      name: '@storybook/addon-postcss',
      options: {
        postcssLoaderOptions: {
          implementation: require('postcss'),
        },
      },
    },
  ],
  framework: '@storybook/react',
};

可能的原因与解决方案

1. 依赖版本不匹配

Storybook核心包与类型定义包版本不一致会导致类型推断错误,出现运行时与类型定义不符的情况。

解决步骤:
强制同步@storybook/react和@types/storybook__react的版本为6.5.13:

npm install @storybook/react@6.5.13 @types/storybook__react@6.5.13 --save-dev
# 或使用yarn
yarn add @storybook/react@6.5.13 @types/storybook__react@6.5.13 --dev

2. 类型定义使用错误

在Storybook 6.5.x中,ComponentStory类型默认接收的是Story上下文对象而非直接的组件props,官方示例可能省略了上下文解构的说明。

修正代码:
显式解构上下文对象中的args属性,并通过StoryContext类型明确约束:

import { ComponentMeta, ComponentStory, StoryContext } from '@storybook/react';

// ...

const Template: ComponentStory<typeof Foo> = ({ args }: StoryContext<FooProps>) => {
  return <Foo {...args} />;
};

如果希望直接接收props,可改用ComponentStoryFn类型(CSF 3.0兼容写法,6.5.x已支持):

import { ComponentMeta, ComponentStoryFn } from '@storybook/react';

// ...

const Template: ComponentStoryFn<typeof Foo> = (args) => {
  return <Foo {...args} />;
};

3. TypeScript配置缺失或错误

确保项目的tsconfig.json包含必要配置项,以正确解析Storybook的类型:

{
  "compilerOptions": {
    "jsx": "react-jsx",
    "esModuleInterop": true,
    "moduleResolution": "node",
    "strict": true
  }
}

4. 未启用TypeScript预设

Storybook 6.5.x需要明确启用TypeScript预设才能正确处理类型推断,在main.js中添加预设配置:

module.exports = {
  stories: [
    './**/*.stories.@(js|jsx|ts|tsx)',
  ],
  addons: [
    {
      name: '@storybook/addon-postcss',
      options: {
        postcssLoaderOptions: {
          implementation: require('postcss'),
        },
      },
    },
    '@storybook/preset-typescript' // 添加该行
  ],
  framework: '@storybook/react',
};

添加后安装依赖:

npm install @storybook/preset-typescript --save-dev

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 10:25:32